drm: make drm_dev_set_unique() not use a format string
authorNicolas Iooss <nicolas.iooss_linux@m4x.org>
Fri, 11 Dec 2015 10:20:27 +0000 (11:20 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 15 Dec 2015 12:52:38 +0000 (13:52 +0100)
drm_dev_set_unique() uses a format string to define the unique name of a
device.  This feature is not used as currently all the calls to this
function either use "%s" as a format string or directly use
dev_name().

Even though this second kind of call does not introduce security
problems, because there cannot be "%" characters in dev_name() results,
gcc issues a warning when building with -Wformat-security flag
("warning: format string is not a string literal (potentially
insecure)").  This warning is useful to find real bugs like the one
fixed by commit 3958b79266b1 ("configfs: fix kernel infoleak through
user-controlled format string").  False positives which do not bring
an extra value make the work of finding real bugs harder.

Therefore remove the format-string feature from drm_dev_set_unique().

Signed-off-by: Nicolas Iooss <nicolas.iooss_linux@m4x.org>
Link: http://patchwork.freedesktop.org/patch/msgid/1449829228-4425-1-git-send-email-nicolas.iooss_linux@m4x.org
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/drm_drv.c
drivers/gpu/drm/nouveau/nouveau_drm.c
drivers/gpu/drm/rockchip/rockchip_drm_drv.c
include/drm/drmP.h

index 7dd6728dd092e23af63516295be42331bcc1f3c8..eaa4316f3c453d4b2e8dd02d281562d115b6f781 100644 (file)
@@ -797,23 +797,18 @@ EXPORT_SYMBOL(drm_dev_unregister);
 /**
  * drm_dev_set_unique - Set the unique name of a DRM device
  * @dev: device of which to set the unique name
- * @fmt: format string for unique name
+ * @name: unique name
  *
- * Sets the unique name of a DRM device using the specified format string and
- * a variable list of arguments. Drivers can use this at driver probe time if
- * the unique name of the devices they drive is static.
+ * Sets the unique name of a DRM device using the specified string. Drivers
+ * can use this at driver probe time if the unique name of the devices they
+ * drive is static.
  *
  * Return: 0 on success or a negative error code on failure.
  */
-int drm_dev_set_unique(struct drm_device *dev, const char *fmt, ...)
+int drm_dev_set_unique(struct drm_device *dev, const char *name)
 {
-       va_list ap;
-
        kfree(dev->unique);
-
-       va_start(ap, fmt);
-       dev->unique = kvasprintf(GFP_KERNEL, fmt, ap);
-       va_end(ap);
+       dev->unique = kstrdup(name, GFP_KERNEL);
 
        return dev->unique ? 0 : -ENOMEM;
 }
index 1d3ee5179ab8521c59471994abb530da1c9f92a1..2d23f95f17ce8bc2e82099138c04d029c07544ab 100644 (file)
@@ -1046,7 +1046,7 @@ nouveau_platform_device_create(const struct nvkm_device_tegra_func *func,
                goto err_free;
        }
 
-       err = drm_dev_set_unique(drm, "%s", dev_name(&pdev->dev));
+       err = drm_dev_set_unique(drm, dev_name(&pdev->dev));
        if (err < 0)
                goto err_free;
 
index f22e1e1ee64aae52a1e3efb657a78790bd6ba573..215d6c44af55b4a70863a0e08b67a4caa59ab12f 100644 (file)
@@ -450,7 +450,7 @@ static int rockchip_drm_bind(struct device *dev)
        if (!drm)
                return -ENOMEM;
 
-       ret = drm_dev_set_unique(drm, "%s", dev_name(dev));
+       ret = drm_dev_set_unique(drm, dev_name(dev));
        if (ret)
                goto err_free;
 
index 5531d7bbe85151efa91685a7ac9ff19f0c4a5b0e..04caa8f8a52f898ec41dd326e21945e07eef5f2c 100644 (file)
@@ -1068,7 +1068,7 @@ void drm_dev_ref(struct drm_device *dev);
 void drm_dev_unref(struct drm_device *dev);
 int drm_dev_register(struct drm_device *dev, unsigned long flags);
 void drm_dev_unregister(struct drm_device *dev);
-int drm_dev_set_unique(struct drm_device *dev, const char *fmt, ...);
+int drm_dev_set_unique(struct drm_device *dev, const char *name);
 
 struct drm_minor *drm_minor_acquire(unsigned int minor_id);
 void drm_minor_release(struct drm_minor *minor);