driver core: prevent device_for_each_child from oopsing
authorGreg Kroah-Hartman <gregkh@suse.de>
Wed, 15 Apr 2009 23:00:12 +0000 (16:00 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 16 Apr 2009 23:17:11 +0000 (16:17 -0700)
David Vrabel noticed that the wireless usb stack likes to call
device_for_each_chile() with an empty bus.  This used to work fine, but
now oopses.  This patch fixes the oops and makes the code behave like it
used to.

Reported-by: David Vrabel <david.vrabel@csr.com>
Tested-by: David Vrabel <david.vrabel@csr.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/base/core.c

index e73c92d13a23dfcd0e5ead18322584de1bb3a154..d230ff4b3eecd24d66975ec3987880446e8deb79 100644 (file)
@@ -1142,6 +1142,9 @@ int device_for_each_child(struct device *parent, void *data,
        struct device *child;
        int error = 0;
 
+       if (!parent->p)
+               return 0;
+
        klist_iter_init(&parent->p->klist_children, &i);
        while ((child = next_device(&i)) && !error)
                error = fn(child, data);