2023-11-02 10:17:36

by Kunwu Chan

[permalink] [raw]
Subject: [PATCH] drm/i915: Fix potential spectre vulnerability

Fix smatch warning:
drivers/gpu/drm/i915/gem/i915_gem_context.c:847 set_proto_ctx_sseu()
warn: potential spectre issue 'pc->user_engines' [r] (local cap)

Signed-off-by: chentao <[email protected]>
---
drivers/gpu/drm/i915/gem/i915_gem_context.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.c b/drivers/gpu/drm/i915/gem/i915_gem_context.c
index 9a9ff84c90d7..b2fdfc7ca4de 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
@@ -843,7 +843,7 @@ static int set_proto_ctx_sseu(struct drm_i915_file_private *fpriv,

if (idx >= pc->num_user_engines)
return -EINVAL;
-
+ idx = array_index_nospec(idx, pc->num_user_engines);
pe = &pc->user_engines[idx];

/* Only render engine supports RPCS configuration. */
--
2.34.1


2023-11-02 11:33:13

by Tvrtko Ursulin

[permalink] [raw]
Subject: Re: [PATCH] drm/i915: Fix potential spectre vulnerability


On 02/11/2023 10:16, chentao wrote:
> Fix smatch warning:
> drivers/gpu/drm/i915/gem/i915_gem_context.c:847 set_proto_ctx_sseu()
> warn: potential spectre issue 'pc->user_engines' [r] (local cap)
>
> Signed-off-by: chentao <[email protected]>

I don't know if this is actually exploitable given the time deltas between the index is read from userspace and acted upon here, which is at least two ioctls apart. But I suppose no harm in fixing and for safety so we need to add:

Fixes: d4433c7600f7 ("drm/i915/gem: Use the proto-context to handle create parameters (v5)")
Cc: <[email protected]> # v5.15+

> ---
> drivers/gpu/drm/i915/gem/i915_gem_context.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.c b/drivers/gpu/drm/i915/gem/i915_gem_context.c
> index 9a9ff84c90d7..b2fdfc7ca4de 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
> @@ -843,7 +843,7 @@ static int set_proto_ctx_sseu(struct drm_i915_file_private *fpriv,
>
> if (idx >= pc->num_user_engines)
> return -EINVAL;
> -

Just please refrain from random whitespace modifications like this blank line removal. If you resend without that you can add my r-b.

Regards,

Tvrtko

> + idx = array_index_nospec(idx, pc->num_user_engines);
> pe = &pc->user_engines[idx];
>
> /* Only render engine supports RPCS configuration. */

2023-11-03 00:07:42

by Andi Shyti

[permalink] [raw]
Subject: Re: [PATCH] drm/i915: Fix potential spectre vulnerability

Hi,

On Thu, Nov 02, 2023 at 11:32:43AM +0000, Tvrtko Ursulin wrote:
> On 02/11/2023 10:16, chentao wrote:
> > Fix smatch warning:
> > drivers/gpu/drm/i915/gem/i915_gem_context.c:847 set_proto_ctx_sseu()
> > warn: potential spectre issue 'pc->user_engines' [r] (local cap)
> >
> > Signed-off-by: chentao <[email protected]>
>
> I don't know if this is actually exploitable given the time deltas between the index is read from userspace and acted upon here, which is at least two ioctls apart. But I suppose no harm in fixing and for safety so we need to add:
>
> Fixes: d4433c7600f7 ("drm/i915/gem: Use the proto-context to handle create parameters (v5)")
> Cc: <[email protected]> # v5.15+

Is this a real fix? I don't mind adding it, though.

> > ---
> > drivers/gpu/drm/i915/gem/i915_gem_context.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.c b/drivers/gpu/drm/i915/gem/i915_gem_context.c
> > index 9a9ff84c90d7..b2fdfc7ca4de 100644
> > --- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
> > +++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
> > @@ -843,7 +843,7 @@ static int set_proto_ctx_sseu(struct drm_i915_file_private *fpriv,
> > if (idx >= pc->num_user_engines)
> > return -EINVAL;
> > -
>
> Just please refrain from random whitespace modifications like this blank line removal. If you resend without that you can add my r-b.
>
> Regards,
>
> Tvrtko
>
> > + idx = array_index_nospec(idx, pc->num_user_engines);

idx has been assigned earlier, can we make it one single
assignment at the declaration?

Andi

2023-11-03 02:32:16

by Kunwu Chan

[permalink] [raw]
Subject: Re: [PATCH] drm/i915: Fix potential spectre vulnerability

Hi Tvrtko,
Thank you very much for your kind suggestion, I have modified it in
accordance with your suggestion.

On 2023/11/2 19:32, Tvrtko Ursulin wrote:
>
> On 02/11/2023 10:16, chentao wrote:
>> Fix smatch warning:
>> drivers/gpu/drm/i915/gem/i915_gem_context.c:847 set_proto_ctx_sseu()
>> warn: potential spectre issue 'pc->user_engines' [r] (local cap)
>>
>> Signed-off-by: chentao <[email protected]>
>
> I don't know if this is actually exploitable given the time deltas
> between the index is read from userspace and acted upon here, which is
> at least two ioctls apart. But I suppose no harm in fixing and for
> safety so we need to add:
>
> Fixes: d4433c7600f7 ("drm/i915/gem: Use the proto-context to handle
> create parameters (v5)")
> Cc: <[email protected]> # v5.15+
>
>> ---
>>   drivers/gpu/drm/i915/gem/i915_gem_context.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.c
>> b/drivers/gpu/drm/i915/gem/i915_gem_context.c
>> index 9a9ff84c90d7..b2fdfc7ca4de 100644
>> --- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
>> @@ -843,7 +843,7 @@ static int set_proto_ctx_sseu(struct
>> drm_i915_file_private *fpriv,
>>           if (idx >= pc->num_user_engines)
>>               return -EINVAL;
>> -
>
> Just please refrain from random whitespace modifications like this blank
> line removal. If you resend without that you can add my r-b.
>
> Regards,
>
> Tvrtko
>
>> +        idx = array_index_nospec(idx, pc->num_user_engines);
>>           pe = &pc->user_engines[idx];
>>           /* Only render engine supports RPCS configuration. */

2023-11-03 02:33:34

by Kunwu Chan

[permalink] [raw]
Subject: [PATCH v2] drm/i915: Fix potential spectre vulnerability

Fix smatch warning:
drivers/gpu/drm/i915/gem/i915_gem_context.c:847 set_proto_ctx_sseu()
warn: potential spectre issue 'pc->user_engines' [r] (local cap)

Fixes: d4433c7600f7 ("drm/i915/gem: Use the proto-context to handle create parameters (v5)")
Cc: <[email protected]> # v5.15+
Signed-off-by: Kunwu Chan <[email protected]>
Suggested-by: Tvrtko Ursulin <[email protected]>
Reviewed-by: Tvrtko Ursulin <[email protected]>
Link: https://lore.kernel.org/all/[email protected]
---
drivers/gpu/drm/i915/gem/i915_gem_context.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.c b/drivers/gpu/drm/i915/gem/i915_gem_context.c
index 9a9ff84c90d7..e38f06a6e56e 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
@@ -844,6 +844,7 @@ static int set_proto_ctx_sseu(struct drm_i915_file_private *fpriv,
if (idx >= pc->num_user_engines)
return -EINVAL;

+ idx = array_index_nospec(idx, pc->num_user_engines);
pe = &pc->user_engines[idx];

/* Only render engine supports RPCS configuration. */
--
2.34.1

2023-11-03 06:57:45

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v2] drm/i915: Fix potential spectre vulnerability

On 03/11/2023 03:32, Kunwu Chan wrote:
> Fix smatch warning:
> drivers/gpu/drm/i915/gem/i915_gem_context.c:847 set_proto_ctx_sseu()
> warn: potential spectre issue 'pc->user_engines' [r] (local cap)
>
> Fixes: d4433c7600f7 ("drm/i915/gem: Use the proto-context to handle create parameters (v5)")
> Cc: <[email protected]> # v5.15+
> Signed-off-by: Kunwu Chan <[email protected]>
> Suggested-by: Tvrtko Ursulin <[email protected]>
> Reviewed-by: Tvrtko Ursulin <[email protected]>

Where did you receive this tag? There is nothing under link below.
> Link: https://lore.kernel.org/all/[email protected]



Best regards,
Krzysztof

2023-11-03 08:24:05

by Tvrtko Ursulin

[permalink] [raw]
Subject: Re: [PATCH v2] drm/i915: Fix potential spectre vulnerability


On 03/11/2023 06:56, Krzysztof Kozlowski wrote:
> On 03/11/2023 03:32, Kunwu Chan wrote:
>> Fix smatch warning:
>> drivers/gpu/drm/i915/gem/i915_gem_context.c:847 set_proto_ctx_sseu()
>> warn: potential spectre issue 'pc->user_engines' [r] (local cap)
>>
>> Fixes: d4433c7600f7 ("drm/i915/gem: Use the proto-context to handle create parameters (v5)")
>> Cc: <[email protected]> # v5.15+
>> Signed-off-by: Kunwu Chan <[email protected]>
>> Suggested-by: Tvrtko Ursulin <[email protected]>
>> Reviewed-by: Tvrtko Ursulin <[email protected]>
>
> Where did you receive this tag? There is nothing under link below.
>> Link: https://lore.kernel.org/all/[email protected]

It is fine, I gave the conditional r-b in
https://lore.kernel.org/all/[email protected]/.

Suggested-by I did not and it is not true so I can drop it while applying.

Regards,

Tvrtko

2023-11-06 09:58:19

by Andi Shyti

[permalink] [raw]
Subject: Re: [PATCH v2] drm/i915: Fix potential spectre vulnerability

Hi Kunwu,

On Fri, Nov 03, 2023 at 10:32:57AM +0800, Kunwu Chan wrote:
> Fix smatch warning:
> drivers/gpu/drm/i915/gem/i915_gem_context.c:847 set_proto_ctx_sseu()
> warn: potential spectre issue 'pc->user_engines' [r] (local cap)
>
> Fixes: d4433c7600f7 ("drm/i915/gem: Use the proto-context to handle create parameters (v5)")
> Cc: <[email protected]> # v5.15+
> Signed-off-by: Kunwu Chan <[email protected]>
> Suggested-by: Tvrtko Ursulin <[email protected]>
> Reviewed-by: Tvrtko Ursulin <[email protected]>
> Link: https://lore.kernel.org/all/[email protected]
> ---
> drivers/gpu/drm/i915/gem/i915_gem_context.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.c b/drivers/gpu/drm/i915/gem/i915_gem_context.c
> index 9a9ff84c90d7..e38f06a6e56e 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
> @@ -844,6 +844,7 @@ static int set_proto_ctx_sseu(struct drm_i915_file_private *fpriv,
> if (idx >= pc->num_user_engines)
> return -EINVAL;
>
> + idx = array_index_nospec(idx, pc->num_user_engines);

you ignored my comment, though.

Andi

> pe = &pc->user_engines[idx];
>
> /* Only render engine supports RPCS configuration. */
> --
> 2.34.1

2023-11-06 10:15:47

by Tvrtko Ursulin

[permalink] [raw]
Subject: Re: [PATCH v2] drm/i915: Fix potential spectre vulnerability


On 06/11/2023 09:57, Andi Shyti wrote:
> Hi Kunwu,
>
> On Fri, Nov 03, 2023 at 10:32:57AM +0800, Kunwu Chan wrote:
>> Fix smatch warning:
>> drivers/gpu/drm/i915/gem/i915_gem_context.c:847 set_proto_ctx_sseu()
>> warn: potential spectre issue 'pc->user_engines' [r] (local cap)
>>
>> Fixes: d4433c7600f7 ("drm/i915/gem: Use the proto-context to handle create parameters (v5)")
>> Cc: <[email protected]> # v5.15+
>> Signed-off-by: Kunwu Chan <[email protected]>
>> Suggested-by: Tvrtko Ursulin <[email protected]>
>> Reviewed-by: Tvrtko Ursulin <[email protected]>
>> Link: https://lore.kernel.org/all/[email protected]
>> ---
>> drivers/gpu/drm/i915/gem/i915_gem_context.c | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.c b/drivers/gpu/drm/i915/gem/i915_gem_context.c
>> index 9a9ff84c90d7..e38f06a6e56e 100644
>> --- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
>> @@ -844,6 +844,7 @@ static int set_proto_ctx_sseu(struct drm_i915_file_private *fpriv,
>> if (idx >= pc->num_user_engines)
>> return -EINVAL;
>>
>> + idx = array_index_nospec(idx, pc->num_user_engines);
>
> you ignored my comment, though.

Sorry it was me, I considered it fine as is given it is the same pattern
as elsewhere in the file. I've merged the patch btw.

Regards,

Tvrtko

>
> Andi
>
>> pe = &pc->user_engines[idx];
>>
>> /* Only render engine supports RPCS configuration. */
>> --
>> 2.34.1