• Anton Blanchard's avatar
    powerpc: do_notify_resume can be called with bad thread_info flags argument · 808be314
    Anton Blanchard authored
    Back in 7230c564 ("powerpc: Rework lazy-interrupt handling") we
    added a call out to restore_interrupts() (written in c) before calling
    do_notify_resume:
    
            bl      restore_interrupts
            addi    r3,r1,STACK_FRAME_OVERHEAD
            bl      do_notify_resume
    
    Unfortunately do_notify_resume takes two arguments, the second one
    being the thread_info flags:
    
    void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags)
    
    We do populate r4 (the second argument) earlier, but
    restore_interrupts() is free to muck it up all it wants. My guess is
    the gcc compiler gods shone down on us and its register allocator
    never used r4. Sometimes, rarely, luck is on our side.
    
    LLVM on the other hand did trample r4.
    Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    808be314
entry_64.S 29.7 KB