| From 811d61e384e24759372bb3f01772f3744b0a8327 Mon Sep 17 00:00:00 2001 |
| From: James Morse <james.morse@arm.com> |
| Date: Tue, 2 Feb 2016 15:53:59 +0000 |
| Subject: arm64: futex.h: Add missing PAN toggling |
| |
| From: James Morse <james.morse@arm.com> |
| |
| commit 811d61e384e24759372bb3f01772f3744b0a8327 upstream. |
| |
| futex.h's futex_atomic_cmpxchg_inatomic() does not use the |
| __futex_atomic_op() macro and needs its own PAN toggling. This was missed |
| when the feature was implemented. |
| |
| Fixes: 338d4f49d6f ("arm64: kernel: Add support for Privileged Access Never") |
| Signed-off-by: James Morse <james.morse@arm.com> |
| Signed-off-by: Will Deacon <will.deacon@arm.com> |
| Cc: Mian Yousaf Kaukab <yousaf.kaukab@suse.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/arm64/include/asm/futex.h | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/arch/arm64/include/asm/futex.h |
| +++ b/arch/arm64/include/asm/futex.h |
| @@ -121,6 +121,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, |
| return -EFAULT; |
| |
| asm volatile("// futex_atomic_cmpxchg_inatomic\n" |
| +ALTERNATIVE("nop", SET_PSTATE_PAN(0), ARM64_HAS_PAN, CONFIG_ARM64_PAN) |
| " prfm pstl1strm, %2\n" |
| "1: ldxr %w1, %2\n" |
| " sub %w3, %w1, %w4\n" |
| @@ -137,6 +138,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, |
| " .align 3\n" |
| " .quad 1b, 4b, 2b, 4b\n" |
| " .popsection\n" |
| +ALTERNATIVE("nop", SET_PSTATE_PAN(1), ARM64_HAS_PAN, CONFIG_ARM64_PAN) |
| : "+r" (ret), "=&r" (val), "+Q" (*uaddr), "=&r" (tmp) |
| : "r" (oldval), "r" (newval), "Ir" (-EFAULT) |
| : "memory"); |