summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-06-15 17:54:51 +0900
committerLinus Torvalds <torvalds@linux-foundation.org>2017-06-15 17:54:51 +0900
commit54ed0f71f0a0cbf3218e2503a50364f178b1e855 (patch)
tree6bb2b4a205bbc208311fbf46e9ed02eb05357a17 /lib
parent35e60a6b7577218ac7eb7777c8849822a080e127 (diff)
parentd41519a69b35b10af7fda867fb9100df24fdf403 (diff)
downloadlinux-54ed0f71f0a0cbf3218e2503a50364f178b1e855.tar.gz
linux-54ed0f71f0a0cbf3218e2503a50364f178b1e855.tar.bz2
linux-54ed0f71f0a0cbf3218e2503a50364f178b1e855.zip
Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto fix from Herbert Xu: "This fixes a bug on sparc where we may dereference freed stack memory" * 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: crypto: Work around deallocated stack frame reference gcc bug on sparc.
Diffstat (limited to 'lib')
-rw-r--r--lib/libcrc32c.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/libcrc32c.c b/lib/libcrc32c.c
index 74a54b7f2562..9f79547d1b97 100644
--- a/lib/libcrc32c.c
+++ b/lib/libcrc32c.c
@@ -43,7 +43,7 @@ static struct crypto_shash *tfm;
u32 crc32c(u32 crc, const void *address, unsigned int length)
{
SHASH_DESC_ON_STACK(shash, tfm);
- u32 *ctx = (u32 *)shash_desc_ctx(shash);
+ u32 ret, *ctx = (u32 *)shash_desc_ctx(shash);
int err;
shash->tfm = tfm;
@@ -53,7 +53,9 @@ u32 crc32c(u32 crc, const void *address, unsigned int length)
err = crypto_shash_update(shash, address, length);
BUG_ON(err);
- return *ctx;
+ ret = *ctx;
+ barrier_data(ctx);
+ return ret;
}
EXPORT_SYMBOL(crc32c);