Jonathan Cavitt <[email protected]> writes:

> XE_RTP_MATCH_FUNC may attempt to dereference the target xe_hw_engine.
> Ensure the hwe is not NULL before calling the function, matching
> XE_RTP_MATCH_ENGINE_CLASS, for example.
>
> This covers a static analysis issue.
>
> Signed-off-by: Jonathan Cavitt <[email protected]>
> Cc: Gustavo Sousa <[email protected]>
> ---
>  drivers/gpu/drm/xe/xe_rtp.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
> index dec9d94e6fb0..2cd26db113d9 100644
> --- a/drivers/gpu/drm/xe/xe_rtp.c
> +++ b/drivers/gpu/drm/xe/xe_rtp.c
> @@ -129,6 +129,9 @@ static bool rule_match_item(struct rule_match_ctx 
> *match_ctx)
>  
>               return hwe->class != r->engine_class;
>       case XE_RTP_MATCH_FUNC:
> +             if (drm_WARN_ON(&xe->drm, !hwe))
> +                     return false;

There are several functions passed via XE_RTP_MATCH_FUNC() (i.e. MATCH()
in definitions of RTP rules) that are meant to be used to do checks that
do not depend on hwe.  Returning false here is wrong as it will cause
those checks to be skipped.

The developer is responsible for not passing a function that uses hwe in
a context where it is NULL.

--
Gustavo Sousa

> +
>               return r->match_func(xe, gt, hwe);
>       default:
>               drm_warn(&xe->drm, "Invalid RTP match %u\n",
> -- 
> 2.53.0

Reply via email to