Patch "KEYS: Fix skcipher IV clobbering" has been added to the 4.7-stable tree
Subsystems (4)
This is a note to let you know that I've just added the patch titled
KEYS: Fix skcipher IV clobbering
to the 4.7-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
keys-fix-skcipher-iv-clobbering.patch
and it can be found in the queue-4.7 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
456bee986e0a372ad4beed5d3cedb3622633d9dfMon Sep 17 00:00:00 2001
From: Herbert Xu <[email protected]>
Date: Tue, 20 Sep 2016 20:35:55 +0800
Subject: KEYS: Fix skcipher IV clobbering
From: Herbert Xu <[email protected]>
commit 456bee986e0a372ad4beed5d3cedb3622633d9df upstream.
The IV must not be modified by the skcipher operation so we need to duplicate it.
--- security/keys/encrypted-keys/encrypted.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
security/keys/encrypted-keys/encrypted.c +7 -4
@@ -29,6 +29,7 @@#include <linux/rcupdate.h> #include <linux/scatterlist.h> #include <linux/ctype.h> +#include <crypto/aes.h> #include <crypto/hash.h> #include <crypto/sha.h> #include <crypto/skcipher.h>
@@ -478,6 +479,7 @@ static int derived_key_encrypt(struct enstruct crypto_skcipher *tfm;struct skcipher_request *req;unsigned int encrypted_datalen; +u8 iv[AES_BLOCK_SIZE ];unsigned int padlen;char pad[16 ];int ret;
@@ -500,8 +502,8 @@ static int derived_key_encrypt(struct ensg_init_table (sg_out,1 );sg_set_buf (sg_out, epayload->encrypted_data, encrypted_datalen); -skcipher_request_set_crypt (req, sg_in, sg_out, encrypted_datalen, - epayload->iv); +memcpy (iv, epayload->iv,sizeof (iv)); +skcipher_request_set_crypt (req, sg_in, sg_out, encrypted_datalen, iv); ret =crypto_skcipher_encrypt (req); tfm =crypto_skcipher_reqtfm (req);skcipher_request_free (req);
@@ -581,6 +583,7 @@ static int derived_key_decrypt(struct enstruct crypto_skcipher *tfm;struct skcipher_request *req;unsigned int encrypted_datalen; +u8 iv[AES_BLOCK_SIZE ];char pad[16 ];int ret;
@@ -599,8 +602,8 @@ static int derived_key_decrypt(struct en epayload->decrypted_datalen);sg_set_buf (&sg_out[1 ], pad,sizeof pad); -skcipher_request_set_crypt (req, sg_in, sg_out, encrypted_datalen, - epayload->iv); +memcpy (iv, epayload->iv,sizeof (iv)); +skcipher_request_set_crypt (req, sg_in, sg_out, encrypted_datalen, iv); ret =crypto_skcipher_decrypt (req); tfm =crypto_skcipher_reqtfm (req);skcipher_request_free (req);
Patches currently in stable-queue which might be from [email protected] are
queue-4.7/crypto-echainiv-replace-chaining-with-multiplication.patch queue-4.7/crypto-arm64-aes-ctr-fix-null-dereference-in-tail-processing.patch queue-4.7/crypto-arm-aes-ctr-fix-null-dereference-in-tail-processing.patch queue-4.7/crypto-skcipher-fix-blkcipher-walk-oom-crash.patch queue-4.7/keys-fix-skcipher-iv-clobbering.patch