android_kernel_oneplus_msm8998/arch/arm64
Will Deacon 442ebc6852 arm64: futex: Fix FUTEX_WAKE_OP atomic ops with non-zero result value
commit 045afc24124d80c6998d9c770844c67912083506 upstream.

Rather embarrassingly, our futex() FUTEX_WAKE_OP implementation doesn't
explicitly set the return value on the non-faulting path and instead
leaves it holding the result of the underlying atomic operation. This
means that any FUTEX_WAKE_OP atomic operation which computes a non-zero
value will be reported as having failed. Regrettably, I wrote the buggy
code back in 2011 and it was upstreamed as part of the initial arm64
support in 2012.

The reasons we appear to get away with this are:

  1. FUTEX_WAKE_OP is rarely used and therefore doesn't appear to get
     exercised by futex() test applications

  2. If the result of the atomic operation is zero, the system call
     behaves correctly

  3. Prior to version 2.25, the only operation used by GLIBC set the
     futex to zero, and therefore worked as expected. From 2.25 onwards,
     FUTEX_WAKE_OP is not used by GLIBC at all.

Fix the implementation by ensuring that the return value is either 0
to indicate that the atomic operation completed successfully, or -EFAULT
if we encountered a fault when accessing the user mapping.

Cc: <stable@kernel.org>
Fixes: 6170a97460 ("arm64: Atomic operations")
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-04-27 09:33:56 +02:00
..
boot arm64: dts: stratix10: Correct System Manager register size 2018-11-21 09:27:37 +01:00
configs arm64 fixes and clean-ups: 2015-11-12 15:33:11 -08:00
crypto crypto: arm64/aes-ccm - fix logical bug in AAD MAC handling 2019-03-23 08:44:34 +01:00
include arm64: futex: Fix FUTEX_WAKE_OP atomic ops with non-zero result value 2019-04-27 09:33:56 +02:00
kernel arm64: debug: Ensure debug handlers check triggering exception level 2019-04-27 09:33:47 +02:00
kvm arm64/kvm: consistently handle host HCR_EL2 flags 2019-01-26 09:42:49 +01:00
lib arm64: add KASAN support 2015-10-12 17:46:36 +01:00
mm arm64: debug: Don't propagate UNKNOWN FAR into si_code for debug signals 2019-04-27 09:33:47 +02:00
net bpf, arm64: fix jit branch offset related to ldimm64 2017-05-14 13:32:58 +02:00
xen
Kconfig arm64: support keyctl() system call in 32-bit mode 2019-04-03 06:23:29 +02:00
Kconfig.debug arm64: remove redundant FRAME_POINTER kconfig option and force to select it 2015-11-10 10:36:00 +00:00
Kconfig.platforms ARM: tegra: select USB_ULPI from EHCI rather than platform 2018-02-25 11:03:51 +01:00
Makefile arm64: remove no-op -p linker flag 2018-12-01 09:46:36 +01:00