• Kamalesh Babulal's avatar
    powerpc/livepatch: Fix livepatch stack access · e36a82ee
    Kamalesh Babulal authored
    While running stress test with livepatch module loaded, kernel bug was
    triggered.
    
      cpu 0x5: Vector: 400 (Instruction Access) at [c0000000eb9d3b60]
      5:mon> t
      [c0000000eb9d3de0] c0000000eb9d3e30 (unreliable)
      [c0000000eb9d3e30] c000000000008ab4 hardware_interrupt_common+0x114/0x120
       --- Exception: 501 (Hardware Interrupt) at c000000000053040 livepatch_handler+0x4c/0x74
      [c0000000eb9d4120] 0000000057ac6e9d (unreliable)
      [d0000000089d9f78] 2e0965747962382e
      SP (965747962342e09) is in userspace
    
    When an interrupt occurs during the livepatch_handler execution, it's
    possible for the livepatch_stack and/or thread_info to be corrupted.
    eg:
    
      Task A                        Interrupt Handler
      =========                     =================
      livepatch_handler:
      mr r0, r1
      ld r1, TI_livepatch_sp(r12)
                                    hardware_interrupt_common:
                                      do_IRQ+0x8:
                                        mflr    r0          <- saved stack pointer is overwritten
                                        bl      _mcount
                                        ...
                                        std     r27,-40(r1) <- overwrite of thread_info()
    
      lis r2, STACK_END_MAGIC@h
      ori r2, r2, STACK_END_MAGIC@l
      ld  r12, -8(r1)
    
    Fix the corruption by using r11 register for livepatch stack
    manipulation, instead of shuffling task stack and livepatch stack into
    r1 register. Using r11 register also avoids disabling/enabling irq's
    while setting up the livepatch stack.
    Signed-off-by: default avatarKamalesh Babulal <kamalesh@linux.vnet.ibm.com>
    Reviewed-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
    Reviewed-by: default avatarBalbir Singh <bsingharora@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    e36a82ee
ftrace_64_mprofile.S 6.71 KB