greybus: endo: fix use-after-free in error path
authorJohan Hovold <johan@hovoldconsulting.com>
Wed, 21 Oct 2015 09:51:42 +0000 (11:51 +0200)
committerGreg Kroah-Hartman <gregkh@google.com>
Wed, 21 Oct 2015 23:12:42 +0000 (16:12 -0700)
Fix use-after-free in endo-registration error path by moving the
id-release to the device release function.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/endo.c

index 84d695df2d62b5cbf5f6b882f538719539d2af2e..c0dc43ff6a5c35524351f3438f7b40acea01c1dc 100644 (file)
@@ -113,6 +113,7 @@ static void gb_endo_release(struct device *dev)
 {
        struct gb_endo *endo = to_gb_endo(dev);
 
+       ida_simple_remove(&greybus_endo_id_map, endo->dev_id);
        kfree(endo);
 }
 
@@ -462,7 +463,6 @@ static int gb_endo_register(struct greybus_host_device *hd,
                dev_err(hd->parent, "failed to add endo device of id 0x%04x\n",
                        endo->id);
                put_device(&endo->dev);
-               ida_simple_remove(&greybus_endo_id_map, endo->dev_id);
        }
 
        return retval;
@@ -518,7 +518,6 @@ void gb_endo_remove(struct gb_endo *endo)
        /* remove all modules for this endo */
        gb_module_remove_all(endo);
 
-       ida_simple_remove(&greybus_endo_id_map, endo->dev_id);
        device_unregister(&endo->dev);
 }