mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-10 23:29:46 +00:00
dm crypt: add plain64 iv
The default plain IV is 32-bit only. This plain64 IV provides a compatible mode for encrypted devices bigger than 4TB. Signed-off-by: Milan Broz <mbroz@redhat.com> Signed-off-by: Alasdair G Kergon <agk@redhat.com>
This commit is contained in:
parent
6db4ccd635
commit
61afef614b
@ -158,6 +158,9 @@ static void kcryptd_queue_crypt(struct dm_crypt_io *io);
|
|||||||
* plain: the initial vector is the 32-bit little-endian version of the sector
|
* plain: the initial vector is the 32-bit little-endian version of the sector
|
||||||
* number, padded with zeros if necessary.
|
* number, padded with zeros if necessary.
|
||||||
*
|
*
|
||||||
|
* plain64: the initial vector is the 64-bit little-endian version of the sector
|
||||||
|
* number, padded with zeros if necessary.
|
||||||
|
*
|
||||||
* essiv: "encrypted sector|salt initial vector", the sector number is
|
* essiv: "encrypted sector|salt initial vector", the sector number is
|
||||||
* encrypted with the bulk cipher using a salt as key. The salt
|
* encrypted with the bulk cipher using a salt as key. The salt
|
||||||
* should be derived from the bulk cipher's key via hashing.
|
* should be derived from the bulk cipher's key via hashing.
|
||||||
@ -180,6 +183,15 @@ static int crypt_iv_plain_gen(struct crypt_config *cc, u8 *iv, sector_t sector)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int crypt_iv_plain64_gen(struct crypt_config *cc, u8 *iv,
|
||||||
|
sector_t sector)
|
||||||
|
{
|
||||||
|
memset(iv, 0, cc->iv_size);
|
||||||
|
*(u64 *)iv = cpu_to_le64(sector);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Initialise ESSIV - compute salt but no local memory allocations */
|
/* Initialise ESSIV - compute salt but no local memory allocations */
|
||||||
static int crypt_iv_essiv_init(struct crypt_config *cc)
|
static int crypt_iv_essiv_init(struct crypt_config *cc)
|
||||||
{
|
{
|
||||||
@ -342,6 +354,10 @@ static struct crypt_iv_operations crypt_iv_plain_ops = {
|
|||||||
.generator = crypt_iv_plain_gen
|
.generator = crypt_iv_plain_gen
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct crypt_iv_operations crypt_iv_plain64_ops = {
|
||||||
|
.generator = crypt_iv_plain64_gen
|
||||||
|
};
|
||||||
|
|
||||||
static struct crypt_iv_operations crypt_iv_essiv_ops = {
|
static struct crypt_iv_operations crypt_iv_essiv_ops = {
|
||||||
.ctr = crypt_iv_essiv_ctr,
|
.ctr = crypt_iv_essiv_ctr,
|
||||||
.dtr = crypt_iv_essiv_dtr,
|
.dtr = crypt_iv_essiv_dtr,
|
||||||
@ -1063,6 +1079,8 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
|
|||||||
cc->iv_gen_ops = NULL;
|
cc->iv_gen_ops = NULL;
|
||||||
else if (strcmp(ivmode, "plain") == 0)
|
else if (strcmp(ivmode, "plain") == 0)
|
||||||
cc->iv_gen_ops = &crypt_iv_plain_ops;
|
cc->iv_gen_ops = &crypt_iv_plain_ops;
|
||||||
|
else if (strcmp(ivmode, "plain64") == 0)
|
||||||
|
cc->iv_gen_ops = &crypt_iv_plain64_ops;
|
||||||
else if (strcmp(ivmode, "essiv") == 0)
|
else if (strcmp(ivmode, "essiv") == 0)
|
||||||
cc->iv_gen_ops = &crypt_iv_essiv_ops;
|
cc->iv_gen_ops = &crypt_iv_essiv_ops;
|
||||||
else if (strcmp(ivmode, "benbi") == 0)
|
else if (strcmp(ivmode, "benbi") == 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user