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
>