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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 28 Nov 2023 17:19:54 +0000 (17:19 +0000)
commit 471aa951bf1206d3c10d0daa67005b8e4db4ff83 upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/i915/i915_perf.c

index 59e1e21df27104760bbb432c6fef30278f667932..109135fcfca28382159e37d177c01af72582c2ed 100644 (file)
@@ -4286,11 +4286,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 |
@@ -4666,11 +4663,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,
@@ -4832,11 +4826,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,