All of lore.kernel.org
 help / color / mirror / Atom feed
From: "José Roberto de Souza" <jose.souza@intel.com>
To: intel-gfx@lists.freedesktop.org
Subject: [PATCH 16/16] drm/i915: Guard debugfs against invalid access when display is disabled
Date: Fri, 12 Oct 2018 14:52:18 -0700	[thread overview]
Message-ID: <20181012215218.5119-16-jose.souza@intel.com> (raw)
In-Reply-To: <20181012215218.5119-1-jose.souza@intel.com>

Without this checks in this debugfs, it would try access memory and
resorces from display causing the driver to crash.

Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 64 +++++++++++++++++++++++++++++
 1 file changed, 64 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 00c551d3e409..7864bf233d99 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -1636,6 +1636,9 @@ static int i915_frontbuffer_tracking(struct seq_file *m, void *unused)
 {
 	struct drm_i915_private *dev_priv = node_to_i915(m->private);
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	seq_printf(m, "FB tracking busy bits: 0x%08x\n",
 		   dev_priv->fb_tracking.busy_bits);
 
@@ -1653,6 +1656,9 @@ static int i915_fbc_status(struct seq_file *m, void *unused)
 	if (!HAS_FBC(dev_priv))
 		return -ENODEV;
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	intel_runtime_pm_get(dev_priv);
 	mutex_lock(&fbc->lock);
 
@@ -1729,6 +1735,9 @@ static int i915_ips_status(struct seq_file *m, void *unused)
 	if (!HAS_IPS(dev_priv))
 		return -ENODEV;
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	intel_runtime_pm_get(dev_priv);
 
 	seq_printf(m, "Enabled by kernel parameter: %s\n",
@@ -1753,6 +1762,9 @@ static int i915_sr_status(struct seq_file *m, void *unused)
 	struct drm_i915_private *dev_priv = node_to_i915(m->private);
 	bool sr_enabled = false;
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	intel_runtime_pm_get(dev_priv);
 	intel_display_power_get(dev_priv, POWER_DOMAIN_INIT);
 
@@ -1891,6 +1903,9 @@ static int i915_gem_framebuffer_info(struct seq_file *m, void *data)
 	struct drm_framebuffer *drm_fb;
 	int ret;
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	ret = mutex_lock_interruptible(&dev->struct_mutex);
 	if (ret)
 		return ret;
@@ -2777,6 +2792,9 @@ i915_edp_psr_debug_set(void *data, u64 val)
 	if (!CAN_PSR(dev_priv))
 		return -ENODEV;
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	DRM_DEBUG_KMS("Setting PSR debug to %llx\n", val);
 
 	intel_runtime_pm_get(dev_priv);
@@ -3222,6 +3240,9 @@ static int i915_display_info(struct seq_file *m, void *unused)
 	struct drm_connector *connector;
 	struct drm_connector_list_iter conn_iter;
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	intel_runtime_pm_get(dev_priv);
 	seq_printf(m, "CRTC info\n");
 	seq_printf(m, "---------\n");
@@ -3326,6 +3347,9 @@ static int i915_shared_dplls_info(struct seq_file *m, void *unused)
 	struct drm_device *dev = &dev_priv->drm;
 	int i;
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	drm_modeset_lock_all(dev);
 	for (i = 0; i < dev_priv->num_shared_dpll; i++) {
 		struct intel_shared_dpll *pll = &dev_priv->shared_dplls[i];
@@ -3398,6 +3422,9 @@ static int i915_ipc_status_open(struct inode *inode, struct file *file)
 	if (!HAS_IPC(dev_priv))
 		return -ENODEV;
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	return single_open(file, i915_ipc_status_show, dev_priv);
 }
 
@@ -3445,6 +3472,9 @@ static int i915_ddb_info(struct seq_file *m, void *unused)
 	if (INTEL_GEN(dev_priv) < 9)
 		return -ENODEV;
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	drm_modeset_lock_all(dev);
 
 	ddb = &dev_priv->wm.skl_hw.ddb;
@@ -3553,6 +3583,9 @@ static int i915_drrs_status(struct seq_file *m, void *unused)
 	struct intel_crtc *intel_crtc;
 	int active_crtc_cnt = 0;
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	drm_modeset_lock_all(dev);
 	for_each_intel_crtc(dev, intel_crtc) {
 		if (intel_crtc->base.state->active) {
@@ -3579,6 +3612,9 @@ static int i915_dp_mst_info(struct seq_file *m, void *unused)
 	struct drm_connector *connector;
 	struct drm_connector_list_iter conn_iter;
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	drm_connector_list_iter_begin(dev, &conn_iter);
 	drm_for_each_connector_iter(connector, &conn_iter) {
 		if (connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort)
@@ -3697,6 +3733,11 @@ static int i915_displayport_test_active_show(struct seq_file *m, void *data)
 static int i915_displayport_test_active_open(struct inode *inode,
 					     struct file *file)
 {
+	struct drm_i915_private *dev_priv = inode->i_private;
+
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	return single_open(file, i915_displayport_test_active_show,
 			   inode->i_private);
 }
@@ -3718,6 +3759,9 @@ static int i915_displayport_test_data_show(struct seq_file *m, void *data)
 	struct drm_connector_list_iter conn_iter;
 	struct intel_dp *intel_dp;
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	drm_connector_list_iter_begin(dev, &conn_iter);
 	drm_for_each_connector_iter(connector, &conn_iter) {
 		struct intel_encoder *encoder;
@@ -3762,6 +3806,9 @@ static int i915_displayport_test_type_show(struct seq_file *m, void *data)
 	struct drm_connector_list_iter conn_iter;
 	struct intel_dp *intel_dp;
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	drm_connector_list_iter_begin(dev, &conn_iter);
 	drm_for_each_connector_iter(connector, &conn_iter) {
 		struct intel_encoder *encoder;
@@ -3878,6 +3925,9 @@ static int pri_wm_latency_open(struct inode *inode, struct file *file)
 	if (INTEL_GEN(dev_priv) < 5 && !IS_G4X(dev_priv))
 		return -ENODEV;
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	return single_open(file, pri_wm_latency_show, dev_priv);
 }
 
@@ -3888,6 +3938,9 @@ static int spr_wm_latency_open(struct inode *inode, struct file *file)
 	if (HAS_GMCH_DISPLAY(dev_priv))
 		return -ENODEV;
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	return single_open(file, spr_wm_latency_show, dev_priv);
 }
 
@@ -3898,6 +3951,9 @@ static int cur_wm_latency_open(struct inode *inode, struct file *file)
 	if (HAS_GMCH_DISPLAY(dev_priv))
 		return -ENODEV;
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	return single_open(file, cur_wm_latency_show, dev_priv);
 }
 
@@ -4645,6 +4701,11 @@ static ssize_t i915_hpd_storm_ctl_write(struct file *file,
 
 static int i915_hpd_storm_ctl_open(struct inode *inode, struct file *file)
 {
+	struct drm_i915_private *dev_priv = inode->i_private;
+
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	return single_open(file, i915_hpd_storm_ctl_show, inode->i_private);
 }
 
@@ -4668,6 +4729,9 @@ static int i915_drrs_ctl_set(void *data, u64 val)
 	if (INTEL_GEN(dev_priv) < 7)
 		return -ENODEV;
 
+	if (!INTEL_INFO(dev_priv)->num_pipes)
+		return -ENODEV;
+
 	drm_modeset_lock_all(dev);
 	for_each_intel_crtc(dev, intel_crtc) {
 		if (!intel_crtc->base.state->active ||
-- 
2.19.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  parent reply	other threads:[~2018-10-12 21:52 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-12 21:52 [PATCH 01/16] drm/i915: Properly set PCH as NOP when display is disabled José Roberto de Souza
2018-10-12 21:52 ` [PATCH 02/16] drm/i915: Move out non-display related calls from display/modeset init/cleanup José Roberto de Souza
2018-10-15 11:14   ` Chris Wilson
2018-10-15 23:51     ` Souza, Jose
2018-10-12 21:52 ` [PATCH 03/16] drm/i915: Move drm_vblank_init() to i915_load_modeset_init() José Roberto de Souza
2018-10-12 21:52 ` [PATCH 04/16] drm/i915: Move FBC init and cleanup calls to modeset functions José Roberto de Souza
2018-10-12 21:52 ` [PATCH 05/16] drm/i915: Move intel_init_ipc() call to i915_load_modeset_init() José Roberto de Souza
2018-10-12 21:52 ` [PATCH 06/16] drm/i915: Don't call modeset related functions when display is disabled José Roberto de Souza
2018-10-22  8:25   ` Jani Nikula
2018-10-22  8:37     ` Chris Wilson
2018-10-22  9:00       ` Jani Nikula
2018-10-25 17:38         ` Souza, Jose
2019-04-08 20:50         ` Chris Wilson
2019-08-24  9:51           ` Chris Wilson
2018-10-12 21:52 ` [PATCH 07/16] drm/i915: Remove redundant checks for num_pipes == 0 José Roberto de Souza
2018-10-22  8:31   ` Jani Nikula
2018-10-12 21:52 ` [PATCH 08/16] drm/i915: Keep overlay functions naming consistent José Roberto de Souza
2018-10-22  8:32   ` Jani Nikula
2018-10-12 21:52 ` [PATCH 09/16] drm/i915: Do not reset display when display is disabled José Roberto de Souza
2018-10-22  8:34   ` Jani Nikula
2018-10-12 21:52 ` [PATCH 10/16] drm/i915: Do not initialize display clocks " José Roberto de Souza
2018-10-22  8:37   ` Jani Nikula
2018-10-12 21:52 ` [PATCH 11/16] drm/i915: Do not initialize display core " José Roberto de Souza
2018-10-22  8:39   ` Jani Nikula
2018-10-12 21:52 ` [PATCH 12/16] drm/i915: Warn when display irq functions is executed " José Roberto de Souza
2018-10-22  8:40   ` Jani Nikula
2018-10-12 21:52 ` [PATCH 13/16] drm/i915: Do not print DC off mismatch state when DMC firmware in not loaded José Roberto de Souza
2018-10-15 10:58   ` Imre Deak
2018-10-16  1:31     ` Souza, Jose
2018-10-16  9:35       ` Imre Deak
2018-10-12 21:52 ` [PATCH 14/16] drm/i915: Do not turn power wells on or off when display is disabled José Roberto de Souza
2018-10-22  8:50   ` Jani Nikula
2018-10-12 21:52 ` [PATCH 15/16] drm/i915: Power down any power well left on by BIOS José Roberto de Souza
2018-10-15 11:06   ` Imre Deak
2018-10-16  0:05     ` Souza, Jose
2018-10-16  9:39       ` Imre Deak
2018-10-12 21:52 ` José Roberto de Souza [this message]
2018-10-22  8:52   ` [PATCH 16/16] drm/i915: Guard debugfs against invalid access when display is disabled Jani Nikula
2018-10-12 22:03 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [01/16] drm/i915: Properly set PCH as NOP " Patchwork
2018-10-12 22:07 ` ✗ Fi.CI.SPARSE: " Patchwork
2018-10-12 22:27 ` ✓ Fi.CI.BAT: success " Patchwork
2018-10-13  2:46 ` ✓ Fi.CI.IGT: " Patchwork
2018-11-03 21:41 ` [PATCH 01/16] " Jani Nikula
2018-11-30  8:29   ` Lucas De Marchi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181012215218.5119-16-jose.souza@intel.com \
    --to=jose.souza@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.