]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/fdinfo: Protect against driver unbind
authorTvrtko Ursulin <tvrtko.ursulin@igalia.com>
Fri, 18 Apr 2025 16:25:12 +0000 (17:25 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 9 May 2025 07:43:50 +0000 (09:43 +0200)
commit 5b1834d6202f86180e451ad1a2a8a193a1da18fc upstream.

If we unbind a driver from the PCI device with an active DRM client,
subsequent read of the fdinfo data associated with the file descriptor in
question will not end well.

Protect the path with a drm_dev_enter/exit() pair.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Fixes: 3f09a0cd4ea3 ("drm: Add common fdinfo helper")
Cc: <stable@vger.kernel.org> # v6.5+
Signed-off-by: Christian König <christian.koenig@amd.com>
Link: https://lore.kernel.org/r/20250418162512.72324-1-tvrtko.ursulin@igalia.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/drm_file.c

index 1d22dba69b2753d70e747eb15a76e0731ba8c944..b943221b238f8710b0db8f19c0d818595d03b5c3 100644 (file)
@@ -1015,6 +1015,10 @@ void drm_show_fdinfo(struct seq_file *m, struct file *f)
        struct drm_file *file = f->private_data;
        struct drm_device *dev = file->minor->dev;
        struct drm_printer p = drm_seq_file_printer(m);
+       int idx;
+
+       if (!drm_dev_enter(dev, &idx))
+               return;
 
        drm_printf(&p, "drm-driver:\t%s\n", dev->driver->name);
        drm_printf(&p, "drm-client-id:\t%llu\n", file->client_id);
@@ -1029,6 +1033,8 @@ void drm_show_fdinfo(struct seq_file *m, struct file *f)
 
        if (dev->driver->show_fdinfo)
                dev->driver->show_fdinfo(&p, file);
+
+       drm_dev_exit(idx);
 }
 EXPORT_SYMBOL(drm_show_fdinfo);