Miroslav Franc 66fb79
From: Heiko Carstens <hca@linux.ibm.com>
Miroslav Franc 66fb79
Date: Thu, 23 Mar 2023 13:09:16 +0100
Miroslav Franc 66fb79
Subject: s390/uaccess: add missing earlyclobber annotations to __clear_user()
Miroslav Franc 66fb79
Git-commit: 89aba4c26fae4e459f755a18912845c348ee48f3
Miroslav Franc 66fb79
Patch-mainline: v6.3-rc5
Miroslav Franc 66fb79
References: bsc#1209856 git-fixes
Miroslav Franc 66fb79
Miroslav Franc 66fb79
Add missing earlyclobber annotation to size, to, and tmp2 operands of the
Miroslav Franc 66fb79
__clear_user() inline assembly since they are modified or written to before
Miroslav Franc 66fb79
the last usage of all input operands. This can lead to incorrect register
Miroslav Franc 66fb79
allocation for the inline assembly.
Miroslav Franc 66fb79
Miroslav Franc 66fb79
Fixes: 6c2a9e6df604 ("[S390] Use alternative user-copy operations for new hardware.")
Miroslav Franc 66fb79
Reported-by: Mark Rutland <mark.rutland@arm.com>
Miroslav Franc 66fb79
Link: https://lore.kernel.org/all/20230321122514.1743889-3-mark.rutland@arm.com/
Miroslav Franc 66fb79
Cc: stable@vger.kernel.org
Miroslav Franc 66fb79
Reviewed-by: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
Miroslav Franc 66fb79
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Miroslav Franc 66fb79
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Miroslav Franc 66fb79
Acked-by: Miroslav Franc <mfranc@suse.cz>
Miroslav Franc 66fb79
---
Miroslav Franc 66fb79
 arch/s390/lib/uaccess.c | 2 +-
Miroslav Franc 66fb79
 1 file changed, 1 insertion(+), 1 deletion(-)
Miroslav Franc 66fb79
Miroslav Franc 66fb79
diff --git a/arch/s390/lib/uaccess.c b/arch/s390/lib/uaccess.c
Miroslav Franc 66fb79
index 9e306eb38170..a00e793ea2e7 100644
Miroslav Franc 66fb79
--- a/arch/s390/lib/uaccess.c
Miroslav Franc 66fb79
+++ b/arch/s390/lib/uaccess.c
Miroslav Franc 66fb79
@@ -292,7 +292,7 @@ static inline unsigned long clear_user_mvcos(void __user *to, unsigned long size
Miroslav Franc 66fb79
 		"4: slgr  %0,%0\n"
Miroslav Franc 66fb79
 		"5:\n"
Miroslav Franc 66fb79
 		EX_TABLE(0b,2b) EX_TABLE(6b,2b) EX_TABLE(3b,5b) EX_TABLE(7b,5b)
Miroslav Franc 66fb79
-		: "+a" (size), "+a" (to), "+a" (tmp1), "=a" (tmp2)
Miroslav Franc 66fb79
+		: "+&a" (size), "+&a" (to), "+a" (tmp1), "=&a" (tmp2)
Miroslav Franc 66fb79
 		: "a" (empty_zero_page), [spec] "K" (0x81UL)
Miroslav Franc 66fb79
 		: "cc", "memory", "0");
Miroslav Franc 66fb79
 	return size;