• Jarkko Nikula's avatar
    i2c: designware: Fix oops from i2c_dw_irq_handler_slave · 984277a0
    Jarkko Nikula authored
    When i2c-designware is initialized in slave mode the
    i2c-designware-slave.c: i2c_dw_irq_handler_slave() can hit a NULL
    pointer dereference when I2C slave backend is not registered but code is
    accessing the struct dw_i2c_dev.slave without testing is it NULL.
    
    We might get spurious interrupts from other devices or from IRQ core
    during unloading the driver when CONFIG_DEBUG_SHIRQ is set. Existing
    check for enable and IRQ status is not enough since device can be power
    gated and those bits may read 1.
    
    Fix this by handling the interrupt only when also struct dw_i2c_dev.slave
    is set.
    Signed-off-by: default avatarJarkko Nikula <jarkko.nikula@linux.intel.com>
    Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
    984277a0
i2c-designware-slave.c 11 KB