1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

Suport DM_SECURE_DATA_FLAG.

It will be user for cryptsetup to ensure buffers are properly
wiped when sending sensitive data (key).
This commit is contained in:
Milan Broz 2011-02-04 16:08:11 +00:00
parent 135af49da5
commit 2b29daaaa6
6 changed files with 24 additions and 3 deletions

View File

@ -1,5 +1,6 @@
Version 1.02.62 - Version 1.02.62 -
=================================== ===================================
Add dm_task_secure_data to libdevmapper to wipe ioctl buffers in kernel.
Set DM_UDEV_DISABLE_OTHER_RULES_FLAG for suspended DM devices in udev rules. Set DM_UDEV_DISABLE_OTHER_RULES_FLAG for suspended DM devices in udev rules.
Initialize pool object for each row in _output_as_rows(). Initialize pool object for each row in _output_as_rows().

View File

@ -1273,6 +1273,13 @@ int dm_task_skip_lockfs(struct dm_task *dmt)
return 1; return 1;
} }
int dm_task_secure_data(struct dm_task *dmt)
{
dmt->secure_data = 1;
return 1;
}
int dm_task_query_inactive_table(struct dm_task *dmt) int dm_task_query_inactive_table(struct dm_task *dmt)
{ {
dmt->query_inactive_table = 1; dmt->query_inactive_table = 1;
@ -1521,6 +1528,8 @@ static struct dm_ioctl *_flatten(struct dm_task *dmt, unsigned repeat_count)
dmi->flags |= DM_READONLY_FLAG; dmi->flags |= DM_READONLY_FLAG;
if (dmt->skip_lockfs) if (dmt->skip_lockfs)
dmi->flags |= DM_SKIP_LOCKFS_FLAG; dmi->flags |= DM_SKIP_LOCKFS_FLAG;
if (dmt->secure_data)
dmi->flags |= DM_SECURE_DATA_FLAG;
if (dmt->query_inactive_table) { if (dmt->query_inactive_table) {
if (_dm_version_minor < 16) if (_dm_version_minor < 16)
log_warn("WARNING: Inactive table query unsupported " log_warn("WARNING: Inactive table query unsupported "
@ -1737,6 +1746,7 @@ static int _create_and_load_v4(struct dm_task *dmt)
task->read_only = dmt->read_only; task->read_only = dmt->read_only;
task->head = dmt->head; task->head = dmt->head;
task->tail = dmt->tail; task->tail = dmt->tail;
task->secure_data = dmt->secure_data;
r = dm_task_run(task); r = dm_task_run(task);
@ -1940,7 +1950,7 @@ static struct dm_ioctl *_do_dm_ioctl(struct dm_task *dmt, unsigned command,
} }
log_debug("dm %s %s%s %s%s%s %s%.0d%s%.0d%s" log_debug("dm %s %s%s %s%s%s %s%.0d%s%.0d%s"
"%s%c%c%s%s %.0" PRIu64 " %s [%u]", "%s%c%c%s%s%s %.0" PRIu64 " %s [%u]",
_cmd_data_v4[dmt->type].name, _cmd_data_v4[dmt->type].name,
dmt->new_uuid ? "UUID " : "", dmt->new_uuid ? "UUID " : "",
dmi->name, dmi->uuid, dmt->newname ? " " : "", dmi->name, dmi->uuid, dmt->newname ? " " : "",
@ -1954,6 +1964,7 @@ static struct dm_ioctl *_do_dm_ioctl(struct dm_task *dmt, unsigned command,
dmt->no_open_count ? 'N' : 'O', dmt->no_open_count ? 'N' : 'O',
dmt->no_flush ? 'N' : 'F', dmt->no_flush ? 'N' : 'F',
dmt->skip_lockfs ? "S " : "", dmt->skip_lockfs ? "S " : "",
dmt->secure_data ? "W " : "",
dmt->query_inactive_table ? "I " : "", dmt->query_inactive_table ? "I " : "",
dmt->sector, _sanitise_message(dmt->message), dmt->sector, _sanitise_message(dmt->message),
dmi->data_size); dmi->data_size);

View File

@ -63,6 +63,7 @@ struct dm_task {
uint64_t existing_table_size; uint64_t existing_table_size;
int cookie_set; int cookie_set;
int new_uuid; int new_uuid;
int secure_data;
char *uuid; char *uuid;
}; };

View File

@ -184,6 +184,7 @@ int dm_task_no_open_count(struct dm_task *dmt);
int dm_task_skip_lockfs(struct dm_task *dmt); int dm_task_skip_lockfs(struct dm_task *dmt);
int dm_task_query_inactive_table(struct dm_task *dmt); int dm_task_query_inactive_table(struct dm_task *dmt);
int dm_task_suppress_identical_reload(struct dm_task *dmt); int dm_task_suppress_identical_reload(struct dm_task *dmt);
int dm_task_secure_data(struct dm_task *dmt);
/* /*
* Control read_ahead. * Control read_ahead.

View File

@ -200,6 +200,7 @@ struct dm_task *dm_task_create(int type)
dmt->cookie_set = 0; dmt->cookie_set = 0;
dmt->query_inactive_table = 0; dmt->query_inactive_table = 0;
dmt->new_uuid = 0; dmt->new_uuid = 0;
dmt->secure_data = 0;
return dmt; return dmt;
} }

View File

@ -269,9 +269,9 @@ enum {
#define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl) #define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl)
#define DM_VERSION_MAJOR 4 #define DM_VERSION_MAJOR 4
#define DM_VERSION_MINOR 19 #define DM_VERSION_MINOR 20
#define DM_VERSION_PATCHLEVEL 0 #define DM_VERSION_PATCHLEVEL 0
#define DM_VERSION_EXTRA "-ioctl (2010-10-14)" #define DM_VERSION_EXTRA "-ioctl (2011-02-02)"
/* Status bits */ /* Status bits */
#define DM_READONLY_FLAG (1 << 0) /* In/Out */ #define DM_READONLY_FLAG (1 << 0) /* In/Out */
@ -330,4 +330,10 @@ enum {
*/ */
#define DM_UUID_FLAG (1 << 14) /* In */ #define DM_UUID_FLAG (1 << 14) /* In */
/*
* If set, all buffers are wiped after use. Used when sending
* or requesting sensitive data like crypt key.
*/
#define DM_SECURE_DATA_FLAG (1 << 15) /* In */
#endif /* _LINUX_DM_IOCTL_H */ #endif /* _LINUX_DM_IOCTL_H */