encrypted-keys: check hex2bin result
authorMimi Zohar <zohar@linux.vnet.ibm.com>
Tue, 20 Sep 2011 15:23:55 +0000 (11:23 -0400)
committerMimi Zohar <zohar@linux.vnet.ibm.com>
Wed, 21 Sep 2011 03:26:44 +0000 (23:26 -0400)
For each hex2bin call in encrypted keys, check that the ascii hex string
is valid.  On failure, return -EINVAL.

Changelog v1:
- hex2bin now returns an int

Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com>
Acked-by: Andy Shevchenko <andy.shevchenko@gmail.com>
security/keys/encrypted-keys/encrypted.c

index 3f57795..f33804c 100644 (file)
@@ -667,11 +667,19 @@ static int encrypted_key_decrypt(struct encrypted_key_payload *epayload,
                return -EINVAL;
 
        hex_encoded_data = hex_encoded_iv + (2 * ivsize) + 2;
                return -EINVAL;
 
        hex_encoded_data = hex_encoded_iv + (2 * ivsize) + 2;
-       hex2bin(epayload->iv, hex_encoded_iv, ivsize);
-       hex2bin(epayload->encrypted_data, hex_encoded_data, encrypted_datalen);
+       ret = hex2bin(epayload->iv, hex_encoded_iv, ivsize);
+       if (ret < 0)
+               return -EINVAL;
+       ret = hex2bin(epayload->encrypted_data, hex_encoded_data,
+                     encrypted_datalen);
+       if (ret < 0)
+               return -EINVAL;
 
        hmac = epayload->format + epayload->datablob_len;
 
        hmac = epayload->format + epayload->datablob_len;
-       hex2bin(hmac, hex_encoded_data + (encrypted_datalen * 2), HASH_SIZE);
+       ret = hex2bin(hmac, hex_encoded_data + (encrypted_datalen * 2),
+                     HASH_SIZE);
+       if (ret < 0)
+               return -EINVAL;
 
        mkey = request_master_key(epayload, &master_key, &master_keylen);
        if (IS_ERR(mkey))
 
        mkey = request_master_key(epayload, &master_key, &master_keylen);
        if (IS_ERR(mkey))