Patch "xtensa: fix futex_atomic_cmpxchg_inatomic" has been added to the 3.18-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
xtensa: fix futex_atomic_cmpxchg_inatomic
to the 3.18-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:
xtensa-fix-futex_atomic_cmpxchg_inatomic.patch
and it can be found in the queue-3.18 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
ca47480921587ae30417dd234a9f79af188e3666Mon Sep 17 00:00:00 2001
From: Max Filippov <[email protected]>
Date: Fri, 5 Jan 2018 14:27:58 -0800
Subject: xtensa: fix futex_atomic_cmpxchg_inatomic
From: Max Filippov <[email protected]>
commit ca47480921587ae30417dd234a9f79af188e3666 upstream.
Return 0 if the operation was successful, not the userspace memory value. Check that userspace value equals passed oldval, not itself. Don't update *uval if the value wasn't read from userspace memory.
This fixes process hang due to infinite loop in futex_lock_pi. It also fixes a bunch of glibc tests nptl/tst-mutexpi*.
--- arch/xtensa/include/asm/futex.h | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-)
arch/xtensa/include/asm/futex.h +10 -13
@@ -109,7 +109,6 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 oldval, u32 newval) { int ret = 0; -u32 prev;if (!access_ok (VERIFY_WRITE , uaddr,sizeof (u32)))return -EFAULT ;
@@ -120,26 +119,24 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, __asm__ __volatile__ (" # futex_atomic_cmpxchg_inatomic\n" -"1: l32i %1, %3, 0\n" -" mov %0, %5\n" -" wsr %1, scompare1\n" -"2: s32c1i %0, %3, 0\n" -"3:\n" +" wsr %5, scompare1\n" +"1: s32c1i %1, %4, 0\n" +" s32i %1, %6, 0\n" +"2:\n" " .section .fixup,\"ax\"\n" " .align 4\n" -"4: .long 3b\n" -"5: l32r %1, 4b\n" -" movi %0, %6\n" +"3: .long 2b\n" +"4: l32r %1, 3b\n" +" movi %0, %7\n" " jx %1\n" " .previous\n" " .section __ex_table,\"a\"\n" -" .long 1b,5b,2b,5b\n" +" .long 1b,4b\n" " .previous\n" - :"+r" (ret),"=&r" (prev),"+m" (*uaddr) - :"r" (uaddr),"r" (oldval),"r" (newval),"I" (-EFAULT ) + :"+r" (ret),"+r" (newval),"+m" (*uaddr),"+m" (*uval) + :"r" (uaddr),"r" (oldval),"r" (uval),"I" (-EFAULT ) :"memory" ); - *uval = prev;return ret; }
Patches currently in stable-queue which might be from [email protected] are
queue-3.18/xtensa-fix-futex_atomic_cmpxchg_inatomic.patch