• Christian Borntraeger's avatar
    s390/entry.S: fix spurious zeroing of r0 · d3f46896
    Christian Borntraeger authored
    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: default avatarFarhan Ali <alifm@linux.vnet.ibm.com>
    Fixes: 7041d281 ("s390: scrub registers on kernel entry and KVM exit")
    Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    d3f46896
entry.S 41.6 KB