From: Milan Broz cc->cipher_mode is now always set in the constructor so we don't need to check for it when processing the DM_DEV_STATUS ioctl. Also reduce the use of the variable 'tfm' which will get removed by a later patch. Signed-off-by: Milan Broz --- drivers/md/dm-crypt.c | 8 ++------ drivers/md/dm-crypt.c | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) Index: linux/drivers/md/dm-crypt.c =================================================================== --- linux.orig/drivers/md/dm-crypt.c +++ linux/drivers/md/dm-crypt.c @@ -122,7 +122,7 @@ struct crypt_config { struct workqueue_struct *crypt_queue; char *cipher; - char *cipher_mode; + char *cipher_string; struct crypt_iv_operations *iv_gen_ops; union { @@ -1158,7 +1158,7 @@ static void crypt_dtr(struct dm_target * free_percpu(cc->cpu); kzfree(cc->cipher); - kzfree(cc->cipher_mode); + kzfree(cc->cipher_string); /* Must zero key material before freeing */ kzfree(cc); @@ -1179,6 +1179,10 @@ static int crypt_ctr_cipher(struct dm_ta return -EINVAL; } + cc->cipher_string = kstrdup(cipher_in, GFP_KERNEL); + if (!cc->cipher_string) + goto bad_mem; + /* * Legacy dm-crypt cipher specification * cipher-mode-iv:ivopts @@ -1190,12 +1194,6 @@ static int crypt_ctr_cipher(struct dm_ta if (!cc->cipher) goto bad_mem; - if (tmp) { - cc->cipher_mode = kstrdup(tmp, GFP_KERNEL); - if (!cc->cipher_mode) - goto bad_mem; - } - chainmode = strsep(&tmp, "-"); ivopts = strsep(&tmp, "-"); ivmode = strsep(&ivopts, ":"); @@ -1209,10 +1207,11 @@ static int crypt_ctr_cipher(struct dm_ta goto bad_mem; } - /* Compatibility mode for old dm-crypt mappings */ + /* + * For compatibility with the original dm-crypt mapping format, if + * only the cipher name is supplied, use cbc-plain. + */ if (!chainmode || (!strcmp(chainmode, "plain") && !ivmode)) { - kfree(cc->cipher_mode); - cc->cipher_mode = kstrdup("cbc-plain", GFP_KERNEL); chainmode = "cbc"; ivmode = "plain"; } @@ -1243,7 +1242,6 @@ static int crypt_ctr_cipher(struct dm_ta } per_cpu_ptr(cc->cpu, cpu)->tfm = tfm; } - tfm = any_tfm(cc); /* Initialize and set key */ ret = crypt_set_key(cc, key); @@ -1253,7 +1251,7 @@ static int crypt_ctr_cipher(struct dm_ta } /* Initialize IV */ - cc->iv_size = crypto_ablkcipher_ivsize(tfm); + cc->iv_size = crypto_ablkcipher_ivsize(any_tfm(cc)); if (cc->iv_size) /* at least a 64 bit sector number should fit in our buffer */ cc->iv_size = max(cc->iv_size, @@ -1453,10 +1451,7 @@ static int crypt_status(struct dm_target break; case STATUSTYPE_TABLE: - if (cc->cipher_mode) - DMEMIT("%s-%s ", cc->cipher, cc->cipher_mode); - else - DMEMIT("%s ", cc->cipher); + DMEMIT("%s ", cc->cipher_string); if (cc->key_size > 0) { if ((maxlen - sz) < ((cc->key_size << 1) + 1))