mirror of
https://gitlab.com/cryptsetup/cryptsetup.git
synced 2025-12-14 04:10:06 +01:00
Refactor LUKS2 activation with dm-integrity.
This commit is contained in:
committed by
Milan Broz
parent
8b2553b3f4
commit
3c1dc9cfaa
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user