]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 18 May 2018 09:02:33 +0000 (11:02 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 18 May 2018 09:02:33 +0000 (11:02 +0200)
added patches:
futex-futex_wake_op-fix-sign_extend32-sign-bits.patch

queue-4.9/futex-futex_wake_op-fix-sign_extend32-sign-bits.patch [new file with mode: 0644]
queue-4.9/series

diff --git a/queue-4.9/futex-futex_wake_op-fix-sign_extend32-sign-bits.patch b/queue-4.9/futex-futex_wake_op-fix-sign_extend32-sign-bits.patch
new file mode 100644 (file)
index 0000000..c9b2d94
--- /dev/null
@@ -0,0 +1,41 @@
+From d70ef22892ed6c066e51e118b225923c9b74af34 Mon Sep 17 00:00:00 2001
+From: Jiri Slaby <jslaby@suse.cz>
+Date: Thu, 30 Nov 2017 15:35:44 +0100
+Subject: futex: futex_wake_op, fix sign_extend32 sign bits
+
+From: Jiri Slaby <jslaby@suse.cz>
+
+commit d70ef22892ed6c066e51e118b225923c9b74af34 upstream.
+
+sign_extend32 counts the sign bit parameter from 0, not from 1.  So we
+have to use "11" for 12th bit, not "12".
+
+This mistake means we have not allowed negative op and cmp args since
+commit 30d6e0a4190d ("futex: Remove duplicated code and fix undefined
+behaviour") till now.
+
+Fixes: 30d6e0a4190d ("futex: Remove duplicated code and fix undefined behaviour")
+Signed-off-by: Jiri Slaby <jslaby@suse.cz>
+Cc: Ingo Molnar <mingo@redhat.com>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Darren Hart <dvhart@infradead.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/futex.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -1462,8 +1462,8 @@ static int futex_atomic_op_inuser(unsign
+ {
+       unsigned int op =         (encoded_op & 0x70000000) >> 28;
+       unsigned int cmp =        (encoded_op & 0x0f000000) >> 24;
+-      int oparg = sign_extend32((encoded_op & 0x00fff000) >> 12, 12);
+-      int cmparg = sign_extend32(encoded_op & 0x00000fff, 12);
++      int oparg = sign_extend32((encoded_op & 0x00fff000) >> 12, 11);
++      int cmparg = sign_extend32(encoded_op & 0x00000fff, 11);
+       int oldval, ret;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28)) {
index addf151a9654ee0d87357ea8fd7bdc3d5063c299..d662466a9e3fb7239f250abbce9adfbdc4ac7f2f 100644 (file)
@@ -31,3 +31,4 @@ revert-arm-dts-imx6qdl-wandboard-fix-audio-channel-swap.patch
 l2tp-revert-l2tp-fix-missing-print-session-offset-info.patch
 nfp-tx-time-stamp-packets-before-hw-doorbell-is-rung.patch
 proc-do-not-access-cmdline-nor-environ-from-file-backed-areas.patch
+futex-futex_wake_op-fix-sign_extend32-sign-bits.patch