]> git.baikalelectronics.ru Git - kernel.git/commit
parisc: Fix access fault handling in pa_memcpy()
authorHelge Deller <deller@gmx.de>
Wed, 29 Mar 2017 19:41:05 +0000 (21:41 +0200)
committerHelge Deller <deller@gmx.de>
Wed, 29 Mar 2017 19:49:02 +0000 (21:49 +0200)
commitdba463376c95b01f0c933127e4b47ad540d66580
treeaeb334dd59c20362c8457f3a2a71b902430092c5
parentd4ea0f086135097a3b540f3b967debcfb07be87f
parisc: Fix access fault handling in pa_memcpy()

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: Al Viro <viro@ZenIV.linux.org.uk>
Cc: <stable@vger.kernel.org> # v4.9+
Signed-off-by: John David Anglin <dave.anglin@bell.net>
Signed-off-by: Helge Deller <deller@gmx.de>
arch/parisc/lib/lusercopy.S
arch/parisc/lib/memcpy.c