• Chengfeng Ye's avatar
    ipmi: fix potential deadlock on &kcs_bmc->lock · b02bb79e
    Chengfeng Ye authored
    As kcs_bmc_handle_event() is executed inside both a timer and a hardirq,
    it should disable irq before lock acquisition otherwise deadlock could
    happen if the timmer is preemtped by the irq.
    
    Possible deadlock scenario:
    aspeed_kcs_check_obe() (timer)
        -> kcs_bmc_handle_event()
        -> spin_lock(&kcs_bmc->lock)
            <irq interruption>
            -> aspeed_kcs_irq()
            -> kcs_bmc_handle_event()
            -> spin_lock(&kcs_bmc->lock) (deadlock here)
    
    This flaw was found using an experimental static analysis tool we are
    developing for irq-related deadlock.
    
    The tentative patch fix the potential deadlock by spin_lock_irqsave()
    Signed-off-by: default avatarChengfeng Ye <dg573847474@gmail.com>
    Message-Id: <20230627152449.36093-1-dg573847474@gmail.com>
    Signed-off-by: default avatarCorey Minyard <minyard@acm.org>
    b02bb79e
kcs_bmc.c 4.7 KB