sparc32: Preserve clone syscall flags argument for restarts due to signals
authorAndreas Larsson <andreas@gaisler.com>
Thu, 4 Feb 2021 16:23:41 +0000 (17:23 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 19 Feb 2021 00:15:11 +0000 (16:15 -0800)
commitc599a7821be7952033727a30e93bd2d053073c78
treedf9b674c803fc84f332c502a184f27a3e99023db
parentbda166930c37604ffa93f2425426af6921ec575a
sparc32: Preserve clone syscall flags argument for restarts due to signals

This fixes a bug where a clone syscall that is restarted due to a
pending signal is restarted with garbage in the register %o0 that holds
the clone flags.

This keep the original %i0 of a syscall (as seen from the trap handler)
in %l6 rather than %l5. This is done because for clone (and also qfork)
%l5 is used as a temporary variable in the same register window. Before
this, that temporary value would be the value that was then incorrectly
used as the orig_i0 argument to do_notify_resume.

In order to preserve %l6, the temporary usage of %l6 in ret_sys_call is
changed to use %l5 instead and the setting %l6 to 0 or 1 was removed.
The use of that 0 or 1 value in %l6 was removed in commit
28e6103665301ce60634e8a77f0b657c6cc099de.

Signed-off-by: Andreas Larsson <andreas@gaisler.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/kernel/entry.S
arch/sparc/kernel/rtrap_32.S