Commit 0f5d1725 authored by Heiko Carstens's avatar Heiko Carstens Committed by Greg Kroah-Hartman

s390/uaccess: get_user() should zero on failure (again)

commit d09c5373 upstream.

Commit fd2d2b19 ("s390: get_user() should zero on failure")
intended to fix s390's get_user() implementation which did not zero
the target operand if the read from user space faulted. Unfortunately
the patch has no effect: the corresponding inline assembly specifies
that the operand is only written to ("=") and the previous value is
discarded.

Therefore the compiler is free to and actually does omit the zero
initialization.

To fix this simply change the contraint modifier to "+", so the
compiler cannot omit the initialization anymore.

Fixes: c9ca7841 ("s390/uaccess: provide inline variants of get_user/put_user")
Fixes: fd2d2b19 ("s390: get_user() should zero on failure")
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 765ee8ce
...@@ -150,7 +150,7 @@ unsigned long __must_check __copy_to_user(void __user *to, const void *from, ...@@ -150,7 +150,7 @@ unsigned long __must_check __copy_to_user(void __user *to, const void *from,
" jg 2b\n" \ " jg 2b\n" \
".popsection\n" \ ".popsection\n" \
EX_TABLE(0b,3b) EX_TABLE(1b,3b) \ EX_TABLE(0b,3b) EX_TABLE(1b,3b) \
: "=d" (__rc), "=Q" (*(to)) \ : "=d" (__rc), "+Q" (*(to)) \
: "d" (size), "Q" (*(from)), \ : "d" (size), "Q" (*(from)), \
"d" (__reg0), "K" (-EFAULT) \ "d" (__reg0), "K" (-EFAULT) \
: "cc"); \ : "cc"); \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment