]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 26 Jan 2021 10:30:59 +0000 (11:30 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 26 Jan 2021 10:30:59 +0000 (11:30 +0100)
added patches:
futex-futex_wake_op-fix-sign_extend32-sign-bits.patch

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

diff --git a/queue-4.14/futex-futex_wake_op-fix-sign_extend32-sign-bits.patch b/queue-4.14/futex-futex_wake_op-fix-sign_extend32-sign-bits.patch
new file mode 100644 (file)
index 0000000..1751713
--- /dev/null
@@ -0,0 +1,41 @@
+From d70ef22892ed6c066e51e118b225923c9b74af34 Mon Sep 17 00:00:00 2001
+From: Jiri Slaby <jirislaby@kernel.org>
+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
+@@ -1725,8 +1725,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 964ea873735e7c84b2638f384a23abbc060b46a9..9e4bb0c32e5f88513854aa89ba8c0831ee661aa9 100644 (file)
@@ -33,3 +33,4 @@ udp-mask-tos-bits-in-udp_v4_early_demux.patch
 ipv6-create-multicast-route-with-rtprot_kernel.patch
 net_sched-avoid-shift-out-of-bounds-in-tcindex_set_parms.patch
 net-dsa-b53-fix-an-off-by-one-in-checking-vlan-vid.patch
+futex-futex_wake_op-fix-sign_extend32-sign-bits.patch