From: Michal Wajdeczko <michal.wajdeczko@intel.com>
To: Matthew Brost <matthew.brost@intel.com>
Cc: intel-xe@lists.freedesktop.org
Subject: Re: [PATCH 3/4] drm/xe/guc: Don't read data from G2H prior to length check
Date: Tue, 5 Nov 2024 21:01:52 +0100 [thread overview]
Message-ID: <18db27f8-8fe0-45ff-828e-87843f2f21be@intel.com> (raw)
In-Reply-To: <ZypzyPc1W/BX9ESg@lstrano-desk.jf.intel.com>
On 05.11.2024 20:36, Matthew Brost wrote:
> On Tue, Nov 05, 2024 at 06:30:31PM +0100, Michal Wajdeczko wrote:
>> While highly unlikely, incoming G2H message might be too short
>> so we shouldn't read any data from it prior to checking a length.
>>
>
> Is this really needed though? The *msg is a per CT member:
>
> xe_guc_ct_types.h
>
> 147 /** @msg: Message buffer */
> 148 u32 msg[GUC_CTB_MSG_MAX_LEN];
> 149 /** @fast_msg: Message buffer */
> 150 u32 fast_msg[GUC_CTB_MSG_MAX_LEN];
>
>
> I suppose this good practice but this is not an actual problem though, right?
it's not a problem in sense that it will not crash per today's
implementation, hence no Fixes: tag, but if that CT implementation would
change in the future then per function signature agreement it will be
the GuC submit code fault to read outside provided message len.
note that since we are provided with len and msg we shouldn't make any
further assumptions about implementation, as otherwise it would be
sufficient to access message directly using already provided guc:
msg = guc->ct.msg;
>
> Matt
>
>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>> Cc: Matthew Brost <matthew.brost@intel.com>
>> ---
>> drivers/gpu/drm/xe/xe_guc_submit.c | 18 +++++++++++++-----
>> 1 file changed, 13 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
>> index 4481890be941..147000fd1177 100644
>> --- a/drivers/gpu/drm/xe/xe_guc_submit.c
>> +++ b/drivers/gpu/drm/xe/xe_guc_submit.c
>> @@ -1885,12 +1885,14 @@ static void handle_sched_done(struct xe_guc *guc, struct xe_exec_queue *q,
>> int xe_guc_sched_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
>> {
>> struct xe_exec_queue *q;
>> - u32 guc_id = msg[0];
>> - u32 runnable_state = msg[1];
>> + u32 guc_id, runnable_state;
>>
>> if (unlikely(len < 2))
>> return -EPROTO;
>>
>> + guc_id = msg[0];
>> + runnable_state = msg[1];
>> +
>> q = g2h_exec_queue_lookup(guc, guc_id);
>> if (unlikely(!q))
>> return -EPROTO;
>> @@ -1924,11 +1926,13 @@ static void handle_deregister_done(struct xe_guc *guc, struct xe_exec_queue *q)
>> int xe_guc_deregister_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
>> {
>> struct xe_exec_queue *q;
>> - u32 guc_id = msg[0];
>> + u32 guc_id;
>>
>> if (unlikely(len < 1))
>> return -EPROTO;
>>
>> + guc_id = msg[0];
>> +
>> q = g2h_exec_queue_lookup(guc, guc_id);
>> if (unlikely(!q))
>> return -EPROTO;
>> @@ -1950,11 +1954,13 @@ int xe_guc_exec_queue_reset_handler(struct xe_guc *guc, u32 *msg, u32 len)
>> {
>> struct xe_gt *gt = guc_to_gt(guc);
>> struct xe_exec_queue *q;
>> - u32 guc_id = msg[0];
>> + u32 guc_id;
>>
>> if (unlikely(len < 1))
>> return -EPROTO;
>>
>> + guc_id = msg[0];
>> +
>> q = g2h_exec_queue_lookup(guc, guc_id);
>> if (unlikely(!q))
>> return -EPROTO;
>> @@ -2010,11 +2016,13 @@ int xe_guc_exec_queue_memory_cat_error_handler(struct xe_guc *guc, u32 *msg,
>> {
>> struct xe_gt *gt = guc_to_gt(guc);
>> struct xe_exec_queue *q;
>> - u32 guc_id = msg[0];
>> + u32 guc_id;
>>
>> if (unlikely(len < 1))
>> return -EPROTO;
>>
>> + guc_id = msg[0];
>> +
>> q = g2h_exec_queue_lookup(guc, guc_id);
>> if (unlikely(!q))
>> return -EPROTO;
>> --
>> 2.43.0
>>
next prev parent reply other threads:[~2024-11-05 20:01 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-05 17:30 [PATCH 0/4] GuC: Improve handling of the malformed G2H Michal Wajdeczko
2024-11-05 17:30 ` [PATCH 1/4] drm/xe/guc: Log content of the failed G2H message Michal Wajdeczko
2024-11-05 19:30 ` Matthew Brost
2024-11-05 17:30 ` [PATCH 2/4] drm/xe/guc: Drop redundant logs about invalid G2H length Michal Wajdeczko
2024-11-05 19:31 ` Matthew Brost
2024-11-05 17:30 ` [PATCH 3/4] drm/xe/guc: Don't read data from G2H prior to length check Michal Wajdeczko
2024-11-05 19:36 ` Matthew Brost
2024-11-05 20:01 ` Michal Wajdeczko [this message]
2024-11-06 1:32 ` Matthew Brost
2024-11-05 17:30 ` [PATCH 4/4] drm/xe/guc: Don't treat GuC generic CAT error as protocol error Michal Wajdeczko
2024-11-05 20:13 ` Michal Wajdeczko
2024-11-05 20:45 ` [PATCH v2 " Michal Wajdeczko
2024-11-06 1:24 ` Matthew Brost
2024-11-05 17:38 ` ✓ CI.Patch_applied: success for GuC: Improve handling of the malformed G2H Patchwork
2024-11-05 17:38 ` ✓ CI.checkpatch: " Patchwork
2024-11-05 17:39 ` ✓ CI.KUnit: " Patchwork
2024-11-05 17:52 ` ✓ CI.Build: " Patchwork
2024-11-05 17:54 ` ✓ CI.Hooks: " Patchwork
2024-11-05 17:56 ` ✓ CI.checksparse: " Patchwork
2024-11-05 18:37 ` ✓ CI.BAT: " Patchwork
2024-11-05 20:51 ` ✓ CI.Patch_applied: success for GuC: Improve handling of the malformed G2H (rev2) Patchwork
2024-11-05 20:52 ` ✓ CI.checkpatch: " Patchwork
2024-11-05 20:53 ` ✓ CI.KUnit: " Patchwork
2024-11-05 21:04 ` ✓ CI.Build: " Patchwork
2024-11-05 21:07 ` ✓ CI.Hooks: " Patchwork
2024-11-05 21:08 ` ✓ CI.checksparse: " Patchwork
2024-11-05 21:36 ` ✓ CI.BAT: " Patchwork
2024-11-06 22:55 ` ✗ CI.FULL: failure for GuC: Improve handling of the malformed G2H Patchwork
2024-11-07 1:06 ` ✗ CI.FULL: failure for GuC: Improve handling of the malformed G2H (rev2) Patchwork
2024-11-07 9:21 ` Michal Wajdeczko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=18db27f8-8fe0-45ff-828e-87843f2f21be@intel.com \
--to=michal.wajdeczko@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=matthew.brost@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox