aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWill Deacon <will.deacon@arm.com>2019-04-10 11:49:11 +0100
committerWill Deacon <will.deacon@arm.com>2019-04-26 13:57:49 +0100
commit8e4e0ac02b449297b86498ac24db5786ddd9f647 (patch)
treefb89e32a00cffd6f64c652571bd51aa783472c4a
parentarm64: futex: Bound number of LDXR/STXR loops in FUTEX_WAKE_OP (diff)
downloadlinux-dev-8e4e0ac02b449297b86498ac24db5786ddd9f647.tar.xz
linux-dev-8e4e0ac02b449297b86498ac24db5786ddd9f647.zip
arm64: futex: Avoid copying out uninitialised stack in failed cmpxchg()
Returning an error code from futex_atomic_cmpxchg_inatomic() indicates that the caller should not make any use of *uval, and should instead act upon on the value of the error code. Although this is implemented correctly in our futex code, we needlessly copy uninitialised stack to *uval in the error case, which can easily be avoided. Signed-off-by: Will Deacon <will.deacon@arm.com>
-rw-r--r--arch/arm64/include/asm/futex.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/arm64/include/asm/futex.h b/arch/arm64/include/asm/futex.h
index 2d78ea6932b7..bdb3c05070a2 100644
--- a/arch/arm64/include/asm/futex.h
+++ b/arch/arm64/include/asm/futex.h
@@ -134,7 +134,9 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *_uaddr,
: "memory");
uaccess_disable();
- *uval = val;
+ if (!ret)
+ *uval = val;
+
return ret;
}