• Geert Uytterhoeven's avatar
    PM / clk: Fix crash in clocks management code if !CONFIG_PM_RUNTIME · a968bed7
    Geert Uytterhoeven authored
    Unlike the clocks management code for runtime PM, the code used for
    system suspend does not check the pm_clock_entry.status field.
    If pm_clk_acquire() failed, ce->status will be PCE_STATUS_ERROR, and
    ce->clk will be a negative error code (e.g. 0xfffffffe = -2 = -ENOENT).
    
    Depending on the clock implementation, suspend or resume may crash with:
    
        Unable to handle kernel NULL pointer dereference at virtual address 00000026
    
    (CCF clk_disable() has an IS_ERR_OR_NULL() check, while CCF clk_enable()
     only has a NULL check; pre-CCF implementations may behave differently)
    
    While just checking for PCE_STATUS_ERROR would be sufficient, it doesn't
    hurt to use the same state machine as is done for runtime PM, as this
    makes the two versions more similar, and eligible for a future
    consolidation.
    Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    a968bed7
clock_ops.c 11.8 KB