X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=lib%2Ftcrypt%2Ftcrypt.c;h=661b54d6bec47581845e73a245d24b7487ee40e4;hb=e4c4049741b12a3283af4c87de1ffccc0f7c36fe;hp=b1ebd0515a2bb079065049951fdb3ec1f3759680;hpb=83f02e66827fa6fa66f9b73a009d2ba51d22352d;p=platform%2Fupstream%2Fcryptsetup.git diff --git a/lib/tcrypt/tcrypt.c b/lib/tcrypt/tcrypt.c index b1ebd05..661b54d 100644 --- a/lib/tcrypt/tcrypt.c +++ b/lib/tcrypt/tcrypt.c @@ -568,7 +568,11 @@ int TCRYPT_read_phdr(struct crypt_device *cd, } r = -EIO; - if (params->flags & CRYPT_TCRYPT_HIDDEN_HEADER) { + if (params->flags & CRYPT_TCRYPT_SYSTEM_HEADER) { + if (lseek(devfd, TCRYPT_HDR_SYSTEM_OFFSET, SEEK_SET) >= 0 && + read_blockwise(devfd, bs, hdr, hdr_size) == hdr_size) + r = TCRYPT_init_hdr(cd, hdr, params); + } else if (params->flags & CRYPT_TCRYPT_HIDDEN_HEADER) { if (params->flags & CRYPT_TCRYPT_BACKUP_HEADER) { if (lseek(devfd, TCRYPT_HDR_HIDDEN_OFFSET_BCK, SEEK_END) >= 0 && read_blockwise(devfd, bs, hdr, hdr_size) == hdr_size) @@ -854,7 +858,11 @@ uint64_t TCRYPT_get_data_offset(struct crypt_device *cd, /* No real header loaded, initialized by active device */ if (!hdr->d.version) - return hdr->d.mk_offset / hdr->d.sector_size; + goto hdr_offset; + + /* Mapping through whole device, not partition! */ + if (params->flags & CRYPT_TCRYPT_SYSTEM_HEADER) + goto hdr_offset; if (params->mode && !strncmp(params->mode, "xts", 3)) { if (hdr->d.version < 3) @@ -868,7 +876,7 @@ uint64_t TCRYPT_get_data_offset(struct crypt_device *cd, return (size - hdr->d.hidden_volume_size + (TCRYPT_HDR_HIDDEN_OFFSET_OLD)) / hdr->d.sector_size; } - return (hdr->d.mk_offset / hdr->d.sector_size); + goto hdr_offset; } if (params->flags & CRYPT_TCRYPT_HIDDEN_HEADER) { @@ -878,7 +886,7 @@ uint64_t TCRYPT_get_data_offset(struct crypt_device *cd, (TCRYPT_HDR_HIDDEN_OFFSET_OLD)) / hdr->d.sector_size; } - // FIXME: system vol. +hdr_offset: return hdr->d.mk_offset / hdr->d.sector_size; }