From: Milan Broz Date: Sun, 23 Jun 2013 13:24:01 +0000 (+0200) Subject: Fix mapping of TCRYPT system encryption for more partitions. X-Git-Tag: upstream/1.6~25 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fupstream%2Fcryptsetup.git;a=commitdiff_plain;h=a36de633d50d1e047cf5c0c3bc5e4d16a411fb62 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. --- diff --git a/lib/tcrypt/tcrypt.c b/lib/tcrypt/tcrypt.c index 811794c..3bab4ba 100644 --- a/lib/tcrypt/tcrypt.c +++ b/lib/tcrypt/tcrypt.c @@ -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;