• Helge Deller's avatar
    parisc: Fix access fault handling in pa_memcpy() · 76343bfb
    Helge Deller authored
    commit 554bfece upstream.
    
    pa_memcpy() is the major memcpy implementation in the parisc kernel which is
    used to do any kind of userspace/kernel memory copies.
    
    Al Viro noticed various bugs in the implementation of pa_mempcy(), most notably
    that in case of faults it may report back to have copied more bytes than it
    actually did.
    
    Fixing those bugs is quite hard in the C-implementation, because the compiler
    is messing around with the registers and we are not guaranteed that specific
    variables are always in the same processor registers. This makes proper fault
    handling complicated.
    
    This patch implements pa_memcpy() in assembler. That way we have correct fault
    handling and adding a 64-bit copy routine was quite easy.
    
    Runtime tested with 32- and 64bit kernels.
    Reported-by: default avatarAl Viro <viro@ZenIV.linux.org.uk>
    Signed-off-by: default avatarJohn David Anglin <dave.anglin@bell.net>
    Signed-off-by: default avatarHelge Deller <deller@gmx.de>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    76343bfb
memcpy.c 2.52 KB