summaryrefslogtreecommitdiffstats
path: root/sys/dev/pccbb
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2006-06-02 06:33:35 +0000
committerimp <imp@FreeBSD.org>2006-06-02 06:33:35 +0000
commitdf3742b87a11cd88f981c3b01866c11f5d6c6d14 (patch)
tree2c31e42309e3f5516e642a80c3072b2ebb2b1b37 /sys/dev/pccbb
parent5b7662dfe9883a7e44fa22ced316b437cc59aaeb (diff)
downloadFreeBSD-src-df3742b87a11cd88f981c3b01866c11f5d6c6d14.zip
FreeBSD-src-df3742b87a11cd88f981c3b01866c11f5d6c6d14.tar.gz
Zero out the devices when they are deleted. We can access the pointer after
the bus detaches which can lead to core dumps. This is quite rare.
Diffstat (limited to 'sys/dev/pccbb')
-rw-r--r--sys/dev/pccbb/pccbb.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/dev/pccbb/pccbb.c b/sys/dev/pccbb/pccbb.c
index 1f7cc2f..a52d624 100644
--- a/sys/dev/pccbb/pccbb.c
+++ b/sys/dev/pccbb/pccbb.c
@@ -465,7 +465,11 @@ cbb_child_detached(device_t brdev, device_t child)
{
struct cbb_softc *sc = device_get_softc(brdev);
- if (child != sc->cbdev && child != sc->exca[0].pccarddev)
+ if (child == sc->cbdev)
+ sc->cbdev = NULL;
+ else if (child == sc->exca[0].pccarddev)
+ sc->exca[0].pccarddev = NULL;
+ else
device_printf(brdev, "Unknown child detached: %s\n",
device_get_nameunit(child));
}
OpenPOWER on IntegriCloud