Skip to content

Commit

Permalink
drm/i915/dsi: filter invalid backlight and CABC ports
Browse files Browse the repository at this point in the history
Avoid using ports that aren't initialized in case the VBT backlight or
CABC ports have invalid values. This fixes a NULL pointer dereference of
intel_dsi->dsi_hosts[port] in such cases.

Cc: stable@vger.kernel.org
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/b0f4f087866257d280eb97d6bcfcefd109cc5fa2.1660664162.git.jani.nikula@intel.com
(cherry picked from commit f4a6c7a)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
  • Loading branch information
Jani Nikula authored and Rodrigo Vivi committed Aug 24, 2022
1 parent de2228c commit 607f417
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 0 deletions.
7 changes: 7 additions & 0 deletions drivers/gpu/drm/i915/display/icl_dsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -2070,7 +2070,14 @@ void icl_dsi_init(struct drm_i915_private *dev_priv)
else
intel_dsi->ports = BIT(port);

if (drm_WARN_ON(&dev_priv->drm, intel_connector->panel.vbt.dsi.bl_ports & ~intel_dsi->ports))
intel_connector->panel.vbt.dsi.bl_ports &= intel_dsi->ports;

intel_dsi->dcs_backlight_ports = intel_connector->panel.vbt.dsi.bl_ports;

if (drm_WARN_ON(&dev_priv->drm, intel_connector->panel.vbt.dsi.cabc_ports & ~intel_dsi->ports))
intel_connector->panel.vbt.dsi.cabc_ports &= intel_dsi->ports;

intel_dsi->dcs_cabc_ports = intel_connector->panel.vbt.dsi.cabc_ports;

for_each_dsi_port(port, intel_dsi->ports) {
Expand Down
7 changes: 7 additions & 0 deletions drivers/gpu/drm/i915/display/vlv_dsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1933,7 +1933,14 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv)
else
intel_dsi->ports = BIT(port);

if (drm_WARN_ON(&dev_priv->drm, intel_connector->panel.vbt.dsi.bl_ports & ~intel_dsi->ports))
intel_connector->panel.vbt.dsi.bl_ports &= intel_dsi->ports;

intel_dsi->dcs_backlight_ports = intel_connector->panel.vbt.dsi.bl_ports;

if (drm_WARN_ON(&dev_priv->drm, intel_connector->panel.vbt.dsi.cabc_ports & ~intel_dsi->ports))
intel_connector->panel.vbt.dsi.cabc_ports &= intel_dsi->ports;

intel_dsi->dcs_cabc_ports = intel_connector->panel.vbt.dsi.cabc_ports;

/* Create a DSI host (and a device) for each port. */
Expand Down

0 comments on commit 607f417

Please sign in to comment.