[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[dm-devel] Re: [BUG] dmsetup table output changed from 2.6.18 to 2.6.19-rc3 and breaks yaird.



Am Montag, den 30.10.2006, 11:00 -0800 schrieb Linus Torvalds:
> On Mon, 30 Oct 2006, Alasdair G Kergon wrote:
> >  
> > It cannot have been intentional as there was no mention of the change to the
> > userspace interface in the git changelog (and the interface version number
> > was not changed).
> > 
> > A new patch is needed to revert the part of the patch that changed the
> > userspace interface.
> > 
> > Please don't forget to copy in the appropriate maintainers when you send
> > messages like this one:
> >   http://marc.theaimsgroup.com/?l=linux-netdev&m=115547174417490&w=2
> > so they can provide acks:-)
> 
> Yeah.
> 
> Herbert, the breakage _seems_ to be due to the STATUSTYPE_TABLE case 
> change:
> 
> -		cipher = crypto_tfm_alg_name(cc->tfm);
> +		cipher = crypto_blkcipher_name(cc->tfm);
> 
> which effectively changes "aes" into "cbc(aes)", which is wrong, since we 
> show the chainmode separately.
> 
> Please, somebody who knows this area, send me a fix,
> 
> (maybe something like this trivial one? Totally untested, but it would 
> seem to be the sane approach)

Yes, this works just fine. It can also be cleaned up a little further as
the temporary variables are unnecessary at that point.

----

Fix dm-crypt after the block cipher API changes to correctly return the
backwards compatible cipher-chainmode[-ivmode] format for "dmsetup
table".

Signed-off-by: Christophe Saout <christophe saout de>

diff linux-2.6.19-rc3.orig/drivers/md/dm-crypt.c linux-2.6.19-rc3/drivers/md/dm-crypt.c
--- linux-2.6.19-rc3.orig/drivers/md/dm-crypt.c	2006-10-26 13:17:58.000000000 +0200
+++ linux-2.6.19-rc3/drivers/md/dm-crypt.c	2006-10-30 20:26:37.000000000 +0100
@@ -915,8 +915,6 @@ static int crypt_status(struct dm_target
 			char *result, unsigned int maxlen)
 {
 	struct crypt_config *cc = (struct crypt_config *) ti->private;
-	const char *cipher;
-	const char *chainmode = NULL;
 	unsigned int sz = 0;
 
 	switch (type) {
@@ -925,14 +923,11 @@ static int crypt_status(struct dm_target
 		break;
 
 	case STATUSTYPE_TABLE:
-		cipher = crypto_blkcipher_name(cc->tfm);
-
-		chainmode = cc->chainmode;
-
 		if (cc->iv_mode)
-			DMEMIT("%s-%s-%s ", cipher, chainmode, cc->iv_mode);
+			DMEMIT("%s-%s-%s ", cc->cipher, cc->chainmode,
+			       cc->iv_mode);
 		else
-			DMEMIT("%s-%s ", cipher, chainmode);
+			DMEMIT("%s-%s ", cc->cipher, cc->chainmode);
 
 		if (cc->key_size > 0) {
 			if ((maxlen - sz) < ((cc->key_size << 1) + 1))

Attachment: signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]