[Intel-gfx] [PATCH 1/5] drm/i915/opregion: check port number bounds for SWSCI display power state

Lucas De Marchi lucas.demarchi at intel.com
Thu Jan 13 16:42:52 UTC 2022


On Thu, Jan 13, 2022 at 01:18:03PM +0200, Jani Nikula wrote:
>The mapping from enum port to whatever port numbering scheme is used by
>the SWSCI Display Power State Notification is odd, and the memory of it
>has faded. In any case, the parameter only has space for ports numbered
>[0..4], and UBSAN reports bit shift beyond it when the platform has port
>F or more.
>
>Since the SWSCI functionality is supposed to be obsolete for new
>platforms (i.e. ones that might have port F or more), just bail out
>early if the mapped and mangled port number is beyond what the Display
>Power State Notification can support.
>
>Fixes: 9c4b0a683193 ("drm/i915: add opregion function to notify bios of encoder enable/disable")
>Cc: <stable at vger.kernel.org> # v3.13+
>Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
>Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/4800
>Signed-off-by: Jani Nikula <jani.nikula at intel.com>
>---
> drivers/gpu/drm/i915/display/intel_opregion.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
>diff --git a/drivers/gpu/drm/i915/display/intel_opregion.c b/drivers/gpu/drm/i915/display/intel_opregion.c
>index af9d30f56cc1..ad1afe9df6c3 100644
>--- a/drivers/gpu/drm/i915/display/intel_opregion.c
>+++ b/drivers/gpu/drm/i915/display/intel_opregion.c
>@@ -363,6 +363,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);

Do we need this log message? It will always trigger for platforms with
PORT F and callers simply ignore the return value.

Lucas De Marchi


More information about the Intel-gfx mailing list