projects/linux·commit bd2049f8

Merge tag 'locking-urgent-2020-05-10' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

bd2049f8 · Linus Torvalds <[email protected]> · 2020-05-10 11:39:31 -07:00

Pull locking fix from Thomas Gleixner:
 "A single fix for the fallout of the recent futex uacess rework.

  With those changes GCC9 fails to analyze arch_futex_atomic_op_inuser()
  correctly and emits a 'maybe unitialized' warning. While we usually
  ignore compiler stupidity the conditional store is pointless anyway
  because the correct case has to store. For the fault case the extra
  store does no harm"

* tag 'locking-urgent-2020-05-10' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  ARM: futex: Address build warning
Commit
bd2049f87107906e4f8dc443ff307c44951d5768
Parents
27d2dcb1 · 8101b5a1

Merge commit. Changes below are compared with the first parent: 27d2dcb1.

Changes

1 files changed · +7 −2

FileStatusAddDelContent
arch/arm/include/asm/futex.hmodified+7−2View file

arch/arm/include/asm/futex.h

View file
diff --git a/arch/arm/include/asm/futex.h b/arch/arm/include/asm/futex.h
index e133da3..a915188 100644
--- a/arch/arm/include/asm/futex.h
+++ b/arch/arm/include/asm/futex.h
@@ -165,8 +165,13 @@ arch_futex_atomic_op_inuser(int op, int oparg, int *oval, u32 __user *uaddr)
preempt_enable();
#endif
- if (!ret)
- *oval = oldval;
+ /*
+ * Store unconditionally. If ret != 0 the extra store is the least
+ * of the worries but GCC cannot figure out that __futex_atomic_op()
+ * is either setting ret to -EFAULT or storing the old value in
+ * oldval which results in a uninitialized warning at the call site.
+ */
+ *oval = oldval;
return ret;
}