drm/i915/guc: Fix potential invalid pointer dereferences when decoding G2Hs
authorJohn Harrison <John.C.Harrison@Intel.com>
Wed, 2 Mar 2022 00:33:57 +0000 (16:33 -0800)
committerJohn Harrison <John.C.Harrison@Intel.com>
Thu, 3 Mar 2022 23:03:12 +0000 (15:03 -0800)
Some G2H handlers were reading the context id field from the payload
before checking the payload met the minimum length required.

Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220302003357.4188363-9-John.C.Harrison@Intel.com
drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c

index e224e6d..9d8a271 100644 (file)
@@ -3895,12 +3895,13 @@ int intel_guc_deregister_done_process_msg(struct intel_guc *guc,
                                          u32 len)
 {
        struct intel_context *ce;
-       u32 ctx_id = msg[0];
+       u32 ctx_id;
 
        if (unlikely(len < 1)) {
                drm_err(&guc_to_gt(guc)->i915->drm, "Invalid length %u\n", len);
                return -EPROTO;
        }
+       ctx_id = msg[0];
 
        ce = g2h_context_lookup(guc, ctx_id);
        if (unlikely(!ce))
@@ -3946,12 +3947,13 @@ int intel_guc_sched_done_process_msg(struct intel_guc *guc,
 {
        struct intel_context *ce;
        unsigned long flags;
-       u32 ctx_id = msg[0];
+       u32 ctx_id;
 
        if (unlikely(len < 2)) {
                drm_err(&guc_to_gt(guc)->i915->drm, "Invalid length %u\n", len);
                return -EPROTO;
        }
+       ctx_id = msg[0];
 
        ce = g2h_context_lookup(guc, ctx_id);
        if (unlikely(!ce))