Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm: Use a const drm_driver for legacy PCI devices

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>

+11 -15
-4
drivers/gpu/drm/drm_drv.c
··· 589 589 590 590 kref_init(&dev->ref); 591 591 dev->dev = get_device(parent); 592 - #ifdef CONFIG_DRM_LEGACY 593 - dev->driver = (struct drm_driver *)driver; 594 - #else 595 592 dev->driver = driver; 596 - #endif 597 593 598 594 INIT_LIST_HEAD(&dev->managed.resources); 599 595 spin_lock_init(&dev->managed.lock);
+5 -3
drivers/gpu/drm/drm_pci.c
··· 201 201 202 202 static int drm_get_pci_dev(struct pci_dev *pdev, 203 203 const struct pci_device_id *ent, 204 - struct drm_driver *driver) 204 + const struct drm_driver *driver) 205 205 { 206 206 struct drm_device *dev; 207 207 int ret; ··· 255 255 * 256 256 * Return: 0 on success or a negative error code on failure. 257 257 */ 258 - int drm_legacy_pci_init(struct drm_driver *driver, struct pci_driver *pdriver) 258 + int drm_legacy_pci_init(const struct drm_driver *driver, 259 + struct pci_driver *pdriver) 259 260 { 260 261 struct pci_dev *pdev = NULL; 261 262 const struct pci_device_id *pid; ··· 301 300 * Unregister a DRM driver shadow-attached through drm_legacy_pci_init(). This 302 301 * is deprecated and only used by dri1 drivers. 303 302 */ 304 - void drm_legacy_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver) 303 + void drm_legacy_pci_exit(const struct drm_driver *driver, 304 + struct pci_driver *pdriver) 305 305 { 306 306 struct drm_device *dev, *tmp; 307 307
-4
include/drm/drm_device.h
··· 76 76 } managed; 77 77 78 78 /** @driver: DRM driver managing the device */ 79 - #ifdef CONFIG_DRM_LEGACY 80 - struct drm_driver *driver; 81 - #else 82 79 const struct drm_driver *driver; 83 - #endif 84 80 85 81 /** 86 82 * @dev_private:
+6 -4
include/drm/drm_legacy.h
··· 198 198 size_t align); 199 199 void drm_pci_free(struct drm_device *dev, struct drm_dma_handle *dmah); 200 200 201 - int drm_legacy_pci_init(struct drm_driver *driver, struct pci_driver *pdriver); 202 - void drm_legacy_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver); 201 + int drm_legacy_pci_init(const struct drm_driver *driver, 202 + struct pci_driver *pdriver); 203 + void drm_legacy_pci_exit(const struct drm_driver *driver, 204 + struct pci_driver *pdriver); 203 205 204 206 #else 205 207 ··· 216 214 { 217 215 } 218 216 219 - static inline int drm_legacy_pci_init(struct drm_driver *driver, 217 + static inline int drm_legacy_pci_init(const struct drm_driver *driver, 220 218 struct pci_driver *pdriver) 221 219 { 222 220 return -EINVAL; 223 221 } 224 222 225 - static inline void drm_legacy_pci_exit(struct drm_driver *driver, 223 + static inline void drm_legacy_pci_exit(const struct drm_driver *driver, 226 224 struct pci_driver *pdriver) 227 225 { 228 226 }