X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=lib%2Fluks1%2Fkeymanage.c;h=0d21081ec4e009280762b25c52e34cc477731f85;hb=b773823a1b8387d7ab93733719951c54cc575f1c;hp=d0ba869c4e79b05db8ef5188071605189b7e5290;hpb=08948141488203cfad966e85e5aea201a240f01c;p=platform%2Fupstream%2Fcryptsetup.git diff --git a/lib/luks1/keymanage.c b/lib/luks1/keymanage.c index d0ba869..0d21081 100644 --- a/lib/luks1/keymanage.c +++ b/lib/luks1/keymanage.c @@ -66,14 +66,22 @@ static uint64_t LUKS_device_sectors(size_t keyLen) static int LUKS_check_device_size(struct crypt_device *ctx, const char *device, size_t keyLength) { - uint64_t dev_size; + uint64_t dev_sectors, hdr_sectors; - if(device_size(device, &dev_size)) { + if (!keyLength) + return -EINVAL; + + if(device_size(device, &dev_sectors)) { log_dbg("Cannot get device size for device %s.", device); return -EIO; } - if (LUKS_device_sectors(keyLength) > (dev_size >> SECTOR_SHIFT)) { + dev_sectors >>= SECTOR_SHIFT; + hdr_sectors = LUKS_device_sectors(keyLength); + log_dbg("Key length %u, device size %" PRIu64 " sectors, header size %" + PRIu64 " sectors.",keyLength, dev_sectors, hdr_sectors); + + if (hdr_sectors > dev_sectors) { log_err(ctx, _("Device %s is too small.\n"), device); return -EINVAL; }