]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/xe/hdcp: Add NULL check for media_gt in intel_hdcp_gsc_check_status()
authorGustavo Sousa <gustavo.sousa@intel.com>
Thu, 16 Apr 2026 18:17:19 +0000 (15:17 -0300)
committerMatthew Brost <matthew.brost@intel.com>
Tue, 5 May 2026 23:14:53 +0000 (16:14 -0700)
When media GT is disabled via configfs, there is no allocation for
media_gt, which is kept as NULL.  In such scenario,
intel_hdcp_gsc_check_status() results in a kernel pagefault error due to
&gt->uc.gsc being evaluated as an invalid memory address.

Fix that by introducing a NULL check on media_gt and bailing out early
if so.

While at it, also drop the NULL check for gsc, since it can't be NULL if
media_gt is not NULL.

v2:
  - Get address for gsc only after checking that gt is not NULL.
    (Shuicheng)
  - Drop the NULL check for gsc. (Shuicheng)
v3:
  - Add "Fixes" and "Cc: <stable...>" tags. (Matt)

Fixes: 4af50beb4e0f ("drm/xe: Use gsc_proxy_init_done to check proxy status")
Cc: <stable@vger.kernel.org> # v6.10+
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Shuicheng Lin <shuicheng.lin@intel.com>
Link: https://patch.msgid.link/20260416-check-for-null-media_gt-in-intel_hdcp_gsc_check_status-v2-1-9adb9fd3b621@intel.com
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
(cherry picked from commit bfaf87e84ca3ca3f6e275f9ae56da47a8b55ffd1)
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
drivers/gpu/drm/xe/display/xe_hdcp_gsc.c

index 29c72aa4b0d2d72a077e5ac5223f1b7221faef6b..33494b86205d2e132f66a49904a6a2e04c535941 100644 (file)
@@ -37,9 +37,17 @@ static bool intel_hdcp_gsc_check_status(struct drm_device *drm)
        struct xe_device *xe = to_xe_device(drm);
        struct xe_tile *tile = xe_device_get_root_tile(xe);
        struct xe_gt *gt = tile->media_gt;
-       struct xe_gsc *gsc = &gt->uc.gsc;
+       struct xe_gsc *gsc;
+
+       if (!gt) {
+               drm_dbg_kms(&xe->drm,
+                           "not checking GSC status for HDCP2.x: media GT not present or disabled\n");
+               return false;
+       }
+
+       gsc = &gt->uc.gsc;
 
-       if (!gsc || !xe_uc_fw_is_available(&gsc->fw)) {
+       if (!xe_uc_fw_is_available(&gsc->fw)) {
                drm_dbg_kms(&xe->drm,
                            "GSC Components not ready for HDCP2.x\n");
                return false;