i915/perf: Fix NULL deref bugs with drm_dbg() calls
authorHarshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Fri, 27 Oct 2023 17:28:22 +0000 (10:28 -0700)
committerJani Nikula <jani.nikula@intel.com>
Mon, 30 Oct 2023 11:48:46 +0000 (13:48 +0200)
When i915 perf interface is not available dereferencing it will lead to
NULL dereferences.

As returning -ENOTSUPP is pretty clear return when perf interface is not
available.

Fixes: 2fec539112e8 ("i915/perf: Replace DRM_DEBUG with driver specific drm_dbg call")
Suggested-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: <stable@vger.kernel.org> # v6.0+
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231027172822.2753059-1-harshit.m.mogalapalli@oracle.com
[tursulin: added stable tag]
(cherry picked from commit 36f27350ff745bd228ab04d7845dfbffc177a889)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/i915_perf.c

index 7178f298b3e61785b4f8f0503327978446531105..f92c2a464ebe7b81bdfadd560537e13a21c07e5b 100644 (file)
@@ -4227,11 +4227,8 @@ int i915_perf_open_ioctl(struct drm_device *dev, void *data,
        u32 known_open_flags;
        int ret;
 
-       if (!perf->i915) {
-               drm_dbg(&perf->i915->drm,
-                       "i915 perf interface not available for this system\n");
+       if (!perf->i915)
                return -ENOTSUPP;
-       }
 
        known_open_flags = I915_PERF_FLAG_FD_CLOEXEC |
                           I915_PERF_FLAG_FD_NONBLOCK |
@@ -4607,11 +4604,8 @@ int i915_perf_add_config_ioctl(struct drm_device *dev, void *data,
        struct i915_oa_reg *regs;
        int err, id;
 
-       if (!perf->i915) {
-               drm_dbg(&perf->i915->drm,
-                       "i915 perf interface not available for this system\n");
+       if (!perf->i915)
                return -ENOTSUPP;
-       }
 
        if (!perf->metrics_kobj) {
                drm_dbg(&perf->i915->drm,
@@ -4773,11 +4767,8 @@ int i915_perf_remove_config_ioctl(struct drm_device *dev, void *data,
        struct i915_oa_config *oa_config;
        int ret;
 
-       if (!perf->i915) {
-               drm_dbg(&perf->i915->drm,
-                       "i915 perf interface not available for this system\n");
+       if (!perf->i915)
                return -ENOTSUPP;
-       }
 
        if (i915_perf_stream_paranoid && !perfmon_capable()) {
                drm_dbg(&perf->i915->drm,