• Srinivas Pandruvada's avatar
    thermal: intel: powerclamp: Fix NULL pointer access issue · b5d68f84
    Srinivas Pandruvada authored
    If cur_state for the powerclamp cooling device is set to the default
    minimum state of 0, without setting first to cur_state > 0, this results
    in NULL pointer access.
    
    This NULL pointer access happens in the powercap core idle-inject
    function idle_inject_set_duration() as there is no NULL check for
    idle_inject_device pointer. This pointer must be allocated by calling
    idle_inject_register() or idle_inject_register_full().
    
    In the function powerclamp_set_cur_state(), idle_inject_device pointer
    is allocated only when the cur_state > 0. But setting 0 without changing
    to any other state, idle_inject_set_duration() will be called with a
    NULL idle_inject_device pointer.
    
    To address this, just return from powerclamp_set_cur_state() if the
    current cooling device state is the same as the last one. Since the
    power-up default cooling device state is 0, changing the state to 0
    again here will return without calling idle_inject_set_duration().
    Signed-off-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Fixes: 8526eb7f ("thermal: intel: powerclamp: Use powercap idle-inject feature")
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=217386Tested-by: default avatarRisto A. Paju <teknohog@iki.fi>
    Cc: 6.3+ <stable@kernel.org> # 6.3+
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    b5d68f84
intel_powerclamp.c 20.7 KB