Ivan T. Ivanov 171720
From: Will Deacon <will.deacon@arm.com>
Ivan T. Ivanov 171720
Date: Wed, 10 Apr 2019 11:49:11 +0100
Ivan T. Ivanov 171720
Subject: arm64: futex: Avoid copying out uninitialised stack in failed
Ivan T. Ivanov 171720
 cmpxchg()
Ivan T. Ivanov 171720
Git-commit: 8e4e0ac02b449297b86498ac24db5786ddd9f647
Ivan T. Ivanov 171720
Patch-mainline: v5.2-rc1
Ivan T. Ivanov 171720
References: git-fixes
Ivan T. Ivanov 171720
Ivan T. Ivanov 171720
Returning an error code from futex_atomic_cmpxchg_inatomic() indicates
Ivan T. Ivanov 171720
that the caller should not make any use of *uval, and should instead act
Ivan T. Ivanov 171720
upon on the value of the error code. Although this is implemented
Ivan T. Ivanov 171720
correctly in our futex code, we needlessly copy uninitialised stack to
Ivan T. Ivanov 171720
*uval in the error case, which can easily be avoided.
Ivan T. Ivanov 171720
Ivan T. Ivanov 171720
Signed-off-by: Will Deacon <will.deacon@arm.com>
Ivan T. Ivanov 171720
Acked-by: Ivan T. Ivanov <iivanov@suse.de>
Ivan T. Ivanov 171720
---
Ivan T. Ivanov 171720
 arch/arm64/include/asm/futex.h |    4 +++-
Ivan T. Ivanov 171720
 1 file changed, 3 insertions(+), 1 deletion(-)
Ivan T. Ivanov 171720
Ivan T. Ivanov 171720
--- a/arch/arm64/include/asm/futex.h
Ivan T. Ivanov 171720
+++ b/arch/arm64/include/asm/futex.h
Ivan T. Ivanov 171720
@@ -134,7 +134,9 @@ futex_atomic_cmpxchg_inatomic(u32 *uval,
Ivan T. Ivanov 171720
 	: "memory");
Ivan T. Ivanov 171720
 	uaccess_disable();
Ivan T. Ivanov 171720
 
Ivan T. Ivanov 171720
-	*uval = val;
Ivan T. Ivanov 171720
+	if (!ret)
Ivan T. Ivanov 171720
+		*uval = val;
Ivan T. Ivanov 171720
+
Ivan T. Ivanov 171720
 	return ret;
Ivan T. Ivanov 171720
 }
Ivan T. Ivanov 171720