Bug in BCMA: device_unregister causing "NULL pointer dereference at"

From: RafaÅ MiÅecki
Date: Thu Jul 07 2011 - 11:25:25 EST


I've problem with bcma and bus subsystem.

This works fine:
modprobe bcma; rmmod bcma

This:
modprobe bcma; modprobe b43; rmmod b43; rmmod bcma
causes:
BUG: unable to handle kernel NULL pointer dereference at (null)

My BCMA has only 3 fores, out of them only 1 is registered as device:
bcma: Core 0 found: ChipCommon (manuf 0x4BF, id 0x800, rev 0x22, class 0x0)
bcma: Core 1 found: IEEE 802.11 (manuf 0x4BF, id 0x812, rev 0x17, class 0x0)
bcma: Core 2 found: PCIe (manuf 0x4BF, id 0x820, rev 0x0F, class 0x0)

The dereference comes out from
static void bcma_unregister_cores(struct bcma_bus *bus)

There is a simple loop:
list_for_each_entry(core, &bus->cores, list) {
if (core->dev_registered)
device_unregister(&core->dev);
}


So when I unload bcma after I got driver (b43) for 0x812 core, I get
NULL pointer dereference.

Any tip, why does it happen?

--
RafaÅ
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/