Fix mapping of TCRYPT system encryption for more partitions.

If TCRYPT system encryption uses only partition (not the whole device)
some other partitions could be in use and we have to use
more relaxed check to allow device activation.
This commit is contained in:
Milan Broz
2013-06-23 15:24:01 +02:00
parent 8a43d49b89
commit a36de633d5

View File

@@ -640,6 +640,7 @@ int TCRYPT_activate(struct crypt_device *cd,
unsigned int i;
int r;
struct tcrypt_algs *algs;
enum devcheck device_check;
struct crypt_dm_active_device dmd = {
.target = DM_CRYPT,
.size = 0,
@@ -676,7 +677,18 @@ int TCRYPT_activate(struct crypt_device *cd,
else
dmd.size = hdr->d.volume_size / hdr->d.sector_size;
r = device_block_adjust(cd, dmd.data_device, DEV_EXCL,
/*
* System encryption use the whole device mapping, there can
* be active partitions.
* FIXME: This will allow multiple mappings unexpectedly.
*/
if ((dmd.flags & CRYPT_ACTIVATE_SHARED) ||
(params->flags & CRYPT_TCRYPT_SYSTEM_HEADER))
device_check = DEV_SHARED;
else
device_check = DEV_EXCL;
r = device_block_adjust(cd, dmd.data_device, device_check,
dmd.u.crypt.offset, &dmd.size, &dmd.flags);
if (r)
return r;