Refactor LUKS2 activation with dm-integrity.

This commit is contained in:
Ondrej Kozina
2018-11-30 12:22:52 +01:00
committed by Milan Broz
parent 8b2553b3f4
commit 3c1dc9cfaa

View File

@@ -1862,7 +1862,7 @@ int LUKS2_activate(struct crypt_device *cd,
int r; int r;
enum devcheck device_check; enum devcheck device_check;
struct luks2_hdr *hdr = crypt_get_hdr(cd, CRYPT_LUKS2); struct luks2_hdr *hdr = crypt_get_hdr(cd, CRYPT_LUKS2);
struct crypt_dm_active_device dmd = { struct crypt_dm_active_device dmdi, dmd = {
.target = DM_CRYPT, .target = DM_CRYPT,
.uuid = crypt_get_uuid(cd), .uuid = crypt_get_uuid(cd),
.size = 0, .size = 0,
@@ -1901,34 +1901,30 @@ int LUKS2_activate(struct crypt_device *cd,
return -EINVAL; return -EINVAL;
} }
snprintf(dm_int_name, sizeof(dm_int_name), "%s_dif", name); r = INTEGRITY_create_dmd_device(cd, NULL, NULL, NULL, NULL, &dmdi, dmd.flags);
r = INTEGRITY_activate(cd, dm_int_name, NULL, NULL, NULL, NULL, dmd.flags);
if (r) if (r)
return r; return r;
snprintf(dm_int_name, sizeof(dm_int_name), "%s_dif", name);
snprintf(dm_int_dev_name, sizeof(dm_int_dev_name), "%s/%s", dm_get_dir(), dm_int_name); snprintf(dm_int_dev_name, sizeof(dm_int_dev_name), "%s/%s", dm_get_dir(), dm_int_name);
r = device_alloc(cd, &device, dm_int_dev_name);
if (r) {
dm_remove_device(cd, dm_int_name, 0);
return r;
}
/* Space for IV metadata only */ /* Space for IV metadata only */
if (!dmd.u.crypt.integrity) if (!dmd.u.crypt.integrity)
dmd.u.crypt.integrity = "none"; dmd.u.crypt.integrity = "none";
dmd.data_device = device;
dmd.u.crypt.offset = 0; dmd.u.crypt.offset = 0;
dmd.size = dmdi.size;
r = INTEGRITY_data_sectors(cd, crypt_data_device(cd), r = INTEGRITY_activate_dmd_device(cd, dm_int_name, &dmdi);
crypt_get_data_offset(cd) * SECTOR_SIZE, if (r < 0)
&dmd.size); return r;
if (r < 0) {
log_err(cd, "Cannot detect integrity device size."); r = device_alloc(cd, &device, dm_int_dev_name);
device_free(cd, device); if (r) {
dm_remove_device(cd, dm_int_name, 0); dm_remove_device(cd, dm_int_name, 0);
return r; return r;
} }
dmd.data_device = device;
} }
r = device_block_adjust(cd, dmd.data_device, device_check, r = device_block_adjust(cd, dmd.data_device, device_check,