On Wed, 29 Mar 2017 06:57:06 +0100
Al Viro <v...@zeniv.linux.org.uk> wrote:

>       The patchset currently in vfs.git#work.uaccess is the result;
> there's more work to do, but it takes care of a large part of the
> problems.  About 2.8KLoc removed, a lot of cruft is gone and semantics
> is hopefully in sync now.  All but two architectures (ia64 and metag)
> had been switched to new mechanism; for these two I'm afraid that I'll
> need serious help from maintainers.

I have tested the code in vfs.git#work.uaccess and in principle it works
for s390. I found one bug which would return an incorrect result
for copy_from_user if the access faults on the last page of the copy.
In that case the new code would return 0 instead of the remaining bytes.

This patch snippet should fix it, please just merge it into commit
"s390: get rid of zeroing, switch to RAW_COPY_USER"

diff --git a/arch/s390/lib/uaccess.c b/arch/s390/lib/uaccess.c
index b55172c..1e5bb2b 100644
--- a/arch/s390/lib/uaccess.c
+++ b/arch/s390/lib/uaccess.c
@@ -35,7 +35,7 @@ static inline unsigned long copy_from_user_mvcos(void *x, 
const void __user *ptr
                "   nr    %4,%3\n"      /* %4 = (ptr + 4095) & -4096 */
                "   slgr  %4,%1\n"
                "   clgr  %0,%4\n"      /* copy crosses next page boundary? */
-               "   jnh   4f\n"
+               "   jnh   5f\n"
                "3: .insn ss,0xc80000000000,0(%4,%2),0(%1),0\n"
                "7: slgr  %0,%4\n"
                "   j     5f\n"

-- 
blue skies,
   Martin.

"Reality continues to ruin my life." - Calvin.

Reply via email to