mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
libdm: do not add params for resume and remove
DM_DEVICE_CREATE with table is doing several ioctl operations, however only some of then takes parameters. Since _create_and_load_v4() reused already existing dm task from DM_DEVICE_RELOAD it has also kept passing its table parameters to DM_DEVICE_RESUME ioctl - but this ioctl is supposed to not take any argument and thus there is no wiping of passed data - and since kernel returns buffer and shortens dmi->data_size accordingly, anything past returned data size remained uncleared in zfree() function. This has problem if the user used dm_task_secure_data (i.e. cryptsetup), as in this case binary expact secured data are erased from main memory after use, but they may have been left in place. This patch is also closing the possible hole for error path, which also reuse same dm task structure for DM_DEVICE_REMOVE.
This commit is contained in:
parent
d44bfe90f1
commit
10e191fd12
@ -1,5 +1,6 @@
|
|||||||
Version 1.02.155 -
|
Version 1.02.155 -
|
||||||
====================================
|
====================================
|
||||||
|
Do not add parameters for RESUME with DM_DEVICE_CREATE dm task.
|
||||||
|
|
||||||
Version 1.02.153 - 31st October 2018
|
Version 1.02.153 - 31st October 2018
|
||||||
====================================
|
====================================
|
||||||
|
@ -1454,6 +1454,7 @@ static int _create_and_load_v4(struct dm_task *dmt)
|
|||||||
dmt->uuid = NULL;
|
dmt->uuid = NULL;
|
||||||
free(dmt->mangled_uuid);
|
free(dmt->mangled_uuid);
|
||||||
dmt->mangled_uuid = NULL;
|
dmt->mangled_uuid = NULL;
|
||||||
|
_dm_task_free_targets(dmt);
|
||||||
|
|
||||||
if (dm_task_run(dmt))
|
if (dm_task_run(dmt))
|
||||||
return 1;
|
return 1;
|
||||||
@ -1464,6 +1465,7 @@ static int _create_and_load_v4(struct dm_task *dmt)
|
|||||||
dmt->uuid = NULL;
|
dmt->uuid = NULL;
|
||||||
free(dmt->mangled_uuid);
|
free(dmt->mangled_uuid);
|
||||||
dmt->mangled_uuid = NULL;
|
dmt->mangled_uuid = NULL;
|
||||||
|
_dm_task_free_targets(dmt);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Also udev-synchronize "remove" dm task that is a part of this revert!
|
* Also udev-synchronize "remove" dm task that is a part of this revert!
|
||||||
|
@ -1466,6 +1466,7 @@ static int _create_and_load_v4(struct dm_task *dmt)
|
|||||||
dmt->uuid = NULL;
|
dmt->uuid = NULL;
|
||||||
dm_free(dmt->mangled_uuid);
|
dm_free(dmt->mangled_uuid);
|
||||||
dmt->mangled_uuid = NULL;
|
dmt->mangled_uuid = NULL;
|
||||||
|
_dm_task_free_targets(dmt);
|
||||||
|
|
||||||
if (dm_task_run(dmt))
|
if (dm_task_run(dmt))
|
||||||
return 1;
|
return 1;
|
||||||
@ -1476,6 +1477,7 @@ static int _create_and_load_v4(struct dm_task *dmt)
|
|||||||
dmt->uuid = NULL;
|
dmt->uuid = NULL;
|
||||||
dm_free(dmt->mangled_uuid);
|
dm_free(dmt->mangled_uuid);
|
||||||
dmt->mangled_uuid = NULL;
|
dmt->mangled_uuid = NULL;
|
||||||
|
_dm_task_free_targets(dmt);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Also udev-synchronize "remove" dm task that is a part of this revert!
|
* Also udev-synchronize "remove" dm task that is a part of this revert!
|
||||||
|
Loading…
Reference in New Issue
Block a user