]> git.karo-electronics.de Git - linux-beck.git/commitdiff
of/platform: Use platform_device interface
authorRicardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Tue, 26 May 2015 07:31:25 +0000 (09:31 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 1 Jun 2015 01:15:17 +0000 (10:15 +0900)
of_platform_device_create_pdata() was using of_device_add() to create
the devices, but of_platform_device_destroy was using
platform_device_unregister() to free them.

of_device_add(), do not call insert_resource(), which initializes the
parent field of the resource structure, needed by release_resource(),
called by of_platform_device_destroy(). This leads to a NULL pointer
deference.

Instead of fixing the NULL pointer deference, what could hide other bugs,
this patch, replaces of_device_add() with platform_device_data().

Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/of/platform.c

index a01f57c9e34eab8a95306b0a2643d26d2d764a1c..f011f57f835afd8edc9960e426b52671366f680b 100644 (file)
@@ -183,8 +183,9 @@ static struct platform_device *of_platform_device_create_pdata(
        dev->dev.bus = &platform_bus_type;
        dev->dev.platform_data = platform_data;
        of_dma_configure(&dev->dev, dev->dev.of_node);
+       dev->name = dev_name(&dev->dev);
 
-       if (of_device_add(dev) != 0) {
+       if (platform_device_add(dev) != 0) {
                of_dma_deconfigure(&dev->dev);
                platform_device_put(dev);
                goto err_clear_flag;