]> git.baikalelectronics.ru Git - kernel.git/commit
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)
commitda2718f7cb2dbfa022aee4917e4d77ef73eea382
tree93d3c3e5bfddc4a0de36b04dd2b5ff098ed1c2b6
parent8808dcaf2d9c823a1a7fdca9ad1c993b4d74c260
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: c2ac19cbaf4f0 ("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