From c8da0a76aa8e6e9359d073ec842af7ca58946446 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sat, 2 Jul 2016 22:42:40 +0200 Subject: [PATCH] Fix keylength = 0 (no key) case. --- lib/volumekey.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/volumekey.c b/lib/volumekey.c index 1ecd29d0..458ce87a 100644 --- a/lib/volumekey.c +++ b/lib/volumekey.c @@ -29,7 +29,7 @@ struct volume_key *crypt_alloc_volume_key(size_t keylength, const char *key) { struct volume_key *vk; - if (!keylength || keylength > (SIZE_MAX - sizeof(*vk))) + if (keylength > (SIZE_MAX - sizeof(*vk))) return NULL; vk = malloc(sizeof(*vk) + keylength); @@ -37,10 +37,14 @@ struct volume_key *crypt_alloc_volume_key(size_t keylength, const char *key) return NULL; vk->keylength = keylength; - if (key) - memcpy(&vk->key, key, keylength); - else - crypt_memzero(&vk->key, keylength); + + /* keylength 0 is valid => no key */ + if (vk->keylength) { + if (key) + memcpy(&vk->key, key, keylength); + else + crypt_memzero(&vk->key, keylength); + } return vk; }