On Tue, Sep 08, 2026 at 01:06:51PM +0300, Luca Coelho wrote:
> The calc_allowed_config_filter() function passes the return value of
> iter_pos_to_idx() directly to BIT(), but the helper can return -1 for
> an invalid iterator.
> 
> The iterator already rejects negative indices before doing a
> configuration, so this should not matter in normal flows.  In any
> case, for robustness, check the index explicitly and warn if it is
> negative, avoiding an undefined shift.
> 
> Fixes: 39e30bdf2f92 ("drm/i915/dp_link_caps: Add link configuration iterator")
> Signed-off-by: Luca Coelho <[email protected]>

Reviewed-by: Imre Deak <[email protected]>

> ---
>  drivers/gpu/drm/i915/display/intel_dp_link_caps.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_caps.c 
> b/drivers/gpu/drm/i915/display/intel_dp_link_caps.c
> index 7b6cc6055da8..98657aa4d3d5 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_link_caps.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_link_caps.c
> @@ -426,12 +426,15 @@ calc_allowed_config_filter(struct intel_dp_link_caps 
> *link_caps,
>                          const struct intel_dp_link_config *forced_params)
>  {
>       struct intel_dp_link_caps_filter allowed_configs = 
> INTEL_DP_LINK_CAPS_FILTER_NONE;
> +     struct intel_display *display = to_intel_display(link_caps->dp);
>       struct intel_dp_link_caps_order order = bw_desc_config_order();
>       struct intel_dp_link_caps_iter iter;
>       struct intel_dp_link_config config;
>  
>       iter_start(&iter, link_caps, order, enabled_configs);
>       for_each_dp_link_config(&iter, &config) {
> +             int config_idx;
> +
>               if (forced_params->rate &&
>                   forced_params->rate != config.rate)
>                       continue;
> @@ -446,7 +449,11 @@ calc_allowed_config_filter(struct intel_dp_link_caps 
> *link_caps,
>               if (config.lane_count > max_limits->lane_count)
>                       continue;
>  
> -             allowed_configs.config_mask |= BIT(iter_pos_to_idx(link_caps, 
> order, iter.pos));
> +             config_idx = iter_pos_to_idx(link_caps, order, iter.pos);
> +             if (drm_WARN_ON(display->drm, config_idx < 0))
> +                     continue;
> +
> +             allowed_configs.config_mask |= BIT(config_idx);
>       }
>       intel_dp_link_caps_iter_end(&iter);
>  
> -- 
> 2.53.0
> 

Reply via email to