drm: Use a const drm_driver for legacy PCI devices
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Thu, 20 Feb 2020 22:19:22 +0000 (00:19 +0200)
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Tue, 5 Jan 2021 05:20:35 +0000 (07:20 +0200)
Now that the legacy PCI support code doesn't need to write to the
drm_driver structure, it can be treated as const through the whole DRM
core, unconditionally. This allows declaring the structure as const in
all drivers, removing one possible attack vector.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/drm_drv.c
drivers/gpu/drm/drm_pci.c
include/drm/drm_device.h
include/drm/drm_legacy.h

index 7343038..3f57e88 100644 (file)
@@ -589,11 +589,7 @@ static int drm_dev_init(struct drm_device *dev,
 
        kref_init(&dev->ref);
        dev->dev = get_device(parent);
-#ifdef CONFIG_DRM_LEGACY
-       dev->driver = (struct drm_driver *)driver;
-#else
        dev->driver = driver;
-#endif
 
        INIT_LIST_HEAD(&dev->managed.resources);
        spin_lock_init(&dev->managed.lock);
index dfb138a..5370e6b 100644 (file)
@@ -201,7 +201,7 @@ static void drm_pci_agp_init(struct drm_device *dev)
 
 static int drm_get_pci_dev(struct pci_dev *pdev,
                           const struct pci_device_id *ent,
-                          struct drm_driver *driver)
+                          const struct drm_driver *driver)
 {
        struct drm_device *dev;
        int ret;
@@ -255,7 +255,8 @@ err_free:
  *
  * Return: 0 on success or a negative error code on failure.
  */
-int drm_legacy_pci_init(struct drm_driver *driver, struct pci_driver *pdriver)
+int drm_legacy_pci_init(const struct drm_driver *driver,
+                       struct pci_driver *pdriver)
 {
        struct pci_dev *pdev = NULL;
        const struct pci_device_id *pid;
@@ -300,7 +301,8 @@ EXPORT_SYMBOL(drm_legacy_pci_init);
  * Unregister a DRM driver shadow-attached through drm_legacy_pci_init(). This
  * is deprecated and only used by dri1 drivers.
  */
-void drm_legacy_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver)
+void drm_legacy_pci_exit(const struct drm_driver *driver,
+                        struct pci_driver *pdriver)
 {
        struct drm_device *dev, *tmp;
 
index bd5abe7..939904a 100644 (file)
@@ -76,11 +76,7 @@ struct drm_device {
        } managed;
 
        /** @driver: DRM driver managing the device */
-#ifdef CONFIG_DRM_LEGACY
-       struct drm_driver *driver;
-#else
        const struct drm_driver *driver;
-#endif
 
        /**
         * @dev_private:
index 852d745..8ed04e9 100644 (file)
@@ -198,8 +198,10 @@ struct drm_dma_handle *drm_pci_alloc(struct drm_device *dev, size_t size,
                                     size_t align);
 void drm_pci_free(struct drm_device *dev, struct drm_dma_handle *dmah);
 
-int drm_legacy_pci_init(struct drm_driver *driver, struct pci_driver *pdriver);
-void drm_legacy_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver);
+int drm_legacy_pci_init(const struct drm_driver *driver,
+                       struct pci_driver *pdriver);
+void drm_legacy_pci_exit(const struct drm_driver *driver,
+                        struct pci_driver *pdriver);
 
 #else
 
@@ -214,13 +216,13 @@ static inline void drm_pci_free(struct drm_device *dev,
 {
 }
 
-static inline int drm_legacy_pci_init(struct drm_driver *driver,
+static inline int drm_legacy_pci_init(const struct drm_driver *driver,
                                      struct pci_driver *pdriver)
 {
        return -EINVAL;
 }
 
-static inline void drm_legacy_pci_exit(struct drm_driver *driver,
+static inline void drm_legacy_pci_exit(const struct drm_driver *driver,
                                       struct pci_driver *pdriver)
 {
 }