drm/i915/opregion: check port number bounds for SWSCI display power state
authorjsg <jsg@openbsd.org>
Thu, 24 Feb 2022 12:59:55 +0000 (12:59 +0000)
committerjsg <jsg@openbsd.org>
Thu, 24 Feb 2022 12:59:55 +0000 (12:59 +0000)
From Jani Nikula
d006f2fe7d627b3ff3f637cf2fa90d30e05887c9 in linux 5.15.y/5.15.25
ea958422291de248b9e2eaaeea36004e84b64043 in mainline linux

sys/dev/pci/drm/i915/display/intel_opregion.c

index abbe6e8..df469af 100644 (file)
@@ -361,6 +361,21 @@ int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
                port++;
        }
 
+       /*
+        * The port numbering and mapping here is bizarre. The now-obsolete
+        * swsci spec supports ports numbered [0..4]. Port E is handled as a
+        * special case, but port F and beyond are not. The functionality is
+        * supposed to be obsolete for new platforms. Just bail out if the port
+        * number is out of bounds after mapping.
+        */
+       if (port > 4) {
+               drm_dbg_kms(&dev_priv->drm,
+                           "[ENCODER:%d:%s] port %c (index %u) out of bounds for display power state notification\n",
+                           intel_encoder->base.base.id, intel_encoder->base.name,
+                           port_name(intel_encoder->port), port);
+               return -EINVAL;
+       }
+
        if (!enable)
                parm |= 4 << 8;