OSDN Git Service

staging: most: register channel device after init of struct members
authorChristian Gromm <christian.gromm@microchip.com>
Mon, 13 Aug 2018 13:02:28 +0000 (15:02 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 27 Aug 2018 17:51:49 +0000 (19:51 +0200)
This patch moves the call to device_register to the end of the channel
initialization section that the devcie belongs to. It is needed to
avoid NULL pointer dereferences once the device is registered with
sysfs.

Signed-off-by: Christian Gromm <christian.gromm@microchip.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/most/core.c

index f4c4646..b59e471 100644 (file)
@@ -1439,10 +1439,6 @@ int most_register_interface(struct most_interface *iface)
                c->dev.parent = &iface->dev;
                c->dev.groups = channel_attr_groups;
                c->dev.release = release_channel;
-               if (device_register(&c->dev)) {
-                       pr_err("registering c->dev failed\n");
-                       goto free_instance_nodev;
-               }
                iface->p->channel[i] = c;
                c->is_starving = 0;
                c->iface = iface;
@@ -1465,6 +1461,10 @@ int most_register_interface(struct most_interface *iface)
                mutex_init(&c->start_mutex);
                mutex_init(&c->nq_mutex);
                list_add_tail(&c->list, &iface->p->channel_list);
+               if (device_register(&c->dev)) {
+                       pr_err("registering c->dev failed\n");
+                       goto free_instance_nodev;
+               }
        }
        pr_info("registered new device mdev%d (%s)\n",
                id, iface->description);