s390/entry.S: fix spurious zeroing of r0
authorChristian Borntraeger <borntraeger@de.ibm.com>
Mon, 5 Mar 2018 19:18:47 +0000 (19:18 +0000)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 6 Mar 2018 08:19:35 +0000 (09:19 +0100)
commitd3f468963cd6fd6d2aa5e26aed8b24232096d0e1
tree93d3c3e5bfddc4a0de36b04dd2b5ff098ed1c2b6
parent61e18270f604c744ed9f8f1b740022516f9726f8
s390/entry.S: fix spurious zeroing of r0

when a system call is interrupted we might call the critical section
cleanup handler that re-does some of the operations. When we are between
.Lsysc_vtime and .Lsysc_do_svc we might also redo the saving of the
problem state registers r0-r7:

.Lcleanup_system_call:
[...]
0:      # update accounting time stamp
        mvc     __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER
        # set up saved register r11
        lg      %r15,__LC_KERNEL_STACK
        la      %r9,STACK_FRAME_OVERHEAD(%r15)
        stg     %r9,24(%r11)            # r11 pt_regs pointer
        # fill pt_regs
        mvc     __PT_R8(64,%r9),__LC_SAVE_AREA_SYNC
--->    stmg    %r0,%r7,__PT_R0(%r9)

The problem is now, that we might have already zeroed out r0.
The fix is to move the zeroing of r0 after sysc_do_svc.

Reported-by: Farhan Ali <alifm@linux.vnet.ibm.com>
Fixes: 7041d28115e91 ("s390: scrub registers on kernel entry and KVM exit")
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/entry.S