acrn-kernel/arch/sparc/lib
Al Viro 65e5a9890e sparc32: fix a braino in fault handling in csum_and_copy_..._user()
commit 1f36cd05e0 upstream.

Fault handler used to make non-trivial calls, so it needed
to set a stack frame up.  Used to be
	save ... - grab a stack frame, old %o... become %i...
	....
	ret	- go back to address originally in %o7, currently %i7
	 restore - switch to previous stack frame, in delay slot
Non-trivial calls had been gone since ab5e8b3312 and that code should
have become
	retl	- go back to address in %o7
	 clr %o0 - have return value set to 0
What it had become instead was
	ret	- go back to address in %i7 - return address of *caller*
	 clr %o0 - have return value set to 0
which is not good, to put it mildly - we forcibly return 0 from
csum_and_copy_{from,to}_iter() (which is what the call of that
thing had been inlined into) and do that without dropping the
stack frame of said csum_and_copy_..._iter().  Confuses the
hell out of the caller of csum_and_copy_..._iter(), obviously...

Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Fixes: ab5e8b3312 "sparc32: propagate the calling conventions change down to __csum_partial_copy_sparc_generic()"
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-11-02 09:35:32 +01:00
..
GENbzero.S
GENcopy_from_user.S
GENcopy_to_user.S
GENmemcpy.S
GENpage.S
GENpatch.S
M7copy_from_user.S
M7copy_to_user.S
M7memcpy.S
M7memset.S
M7patch.S
Makefile
Memcpy_utils.S
NG2copy_from_user.S
NG2copy_to_user.S
NG2memcpy.S
NG2patch.S
NG4clear_page.S
NG4copy_from_user.S
NG4copy_page.S
NG4copy_to_user.S
NG4fls.S
NG4memcpy.S
NG4memset.S
NG4patch.S
NGbzero.S
NGcopy_from_user.S
NGcopy_to_user.S
NGmemcpy.S
NGpage.S
NGpatch.S
PeeCeeI.c
U1copy_from_user.S
U1copy_to_user.S
U1memcpy.S
U3copy_from_user.S
U3copy_to_user.S
U3memcpy.S
U3patch.S
VISsave.S
ashldi3.S
ashrdi3.S
atomic32.c
atomic_64.S
bitext.c
bitops.S
blockops.S
bzero.S
checksum_32.S
checksum_64.S
clear_page.S
cmpdi2.c
copy_in_user.S
copy_page.S
copy_user.S
csum_copy.S
csum_copy_from_user.S
csum_copy_to_user.S
divdi3.S
ffs.S
fls.S
fls64.S
hweight.S
iomap.c
ipcsum.S
libgcc.h
locks.S
lshrdi3.S
mcount.S
memcmp.S
memcpy.S
memmove.S
memscan_32.S
memscan_64.S
memset.S
muldi3.S
multi3.S
strlen.S
strncmp_32.S
strncmp_64.S
ucmpdi2.c
udivdi3.S
xor.S