• Rafael J. Wysocki's avatar
    thermal/debugfs: Prevent use-after-free from occurring after cdev removal · d351eb0a
    Rafael J. Wysocki authored
    Since thermal_debug_cdev_remove() does not run under cdev->lock, it can
    run in parallel with thermal_debug_cdev_state_update() and it may free
    the struct thermal_debugfs object used by the latter after it has been
    checked against NULL.
    
    If that happens, thermal_debug_cdev_state_update() will access memory
    that has been freed already causing the kernel to crash.
    
    Address this by using cdev->lock in thermal_debug_cdev_remove() around
    the cdev->debugfs value check (in case the same cdev is removed at the
    same time in two different threads) and its reset to NULL.
    
    Fixes: 755113d7 ("thermal/debugfs: Add thermal cooling device debugfs information")
    Cc :6.8+ <stable@vger.kernel.org> # 6.8+
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Reviewed-by: default avatarLukasz Luba <lukasz.luba@arm.com>
    d351eb0a
thermal_debugfs.c 22.7 KB