diff options
Diffstat (limited to 'meta-snowyowl/recipes-kernel/linux/files/0175-crypto-asymmetric_keys-handle-EBUSY-due-to-backlog-c.patch')
-rwxr-xr-x | meta-snowyowl/recipes-kernel/linux/files/0175-crypto-asymmetric_keys-handle-EBUSY-due-to-backlog-c.patch | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/meta-snowyowl/recipes-kernel/linux/files/0175-crypto-asymmetric_keys-handle-EBUSY-due-to-backlog-c.patch b/meta-snowyowl/recipes-kernel/linux/files/0175-crypto-asymmetric_keys-handle-EBUSY-due-to-backlog-c.patch new file mode 100755 index 00000000..52df2713 --- /dev/null +++ b/meta-snowyowl/recipes-kernel/linux/files/0175-crypto-asymmetric_keys-handle-EBUSY-due-to-backlog-c.patch @@ -0,0 +1,40 @@ +From ae89eb389dd82c3ff6ec07f28019f7f474605827 Mon Sep 17 00:00:00 2001 +From: Gilad Ben-Yossef <gilad@benyossef.com> +Date: Thu, 18 May 2017 16:29:23 +0300 +Subject: [PATCH 021/331] crypto: asymmetric_keys - handle EBUSY due to backlog + correctly + +commit e68368aed56324e2e38d4f6b044bb8cf82077fc2 upstream. + +public_key_verify_signature() was passing the CRYPTO_TFM_REQ_MAY_BACKLOG +flag to akcipher_request_set_callback() but was not handling correctly +the case where a -EBUSY error could be returned from the call to +crypto_akcipher_verify() if backlog was used, possibly casuing +data corruption due to use-after-free of buffers. + +Resolve this by handling -EBUSY correctly. + +Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com> +Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> +Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + crypto/asymmetric_keys/public_key.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/crypto/asymmetric_keys/public_key.c b/crypto/asymmetric_keys/public_key.c +index fd76b5f..4955eb6 100644 +--- a/crypto/asymmetric_keys/public_key.c ++++ b/crypto/asymmetric_keys/public_key.c +@@ -140,7 +140,7 @@ int public_key_verify_signature(const struct public_key *pkey, + * signature and returns that to us. + */ + ret = crypto_akcipher_verify(req); +- if (ret == -EINPROGRESS) { ++ if ((ret == -EINPROGRESS) || (ret == -EBUSY)) { + wait_for_completion(&compl.completion); + ret = compl.err; + } +-- +2.7.4 + |