diff options
author | imp <imp@FreeBSD.org> | 2006-06-02 06:33:35 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 2006-06-02 06:33:35 +0000 |
commit | df3742b87a11cd88f981c3b01866c11f5d6c6d14 (patch) | |
tree | 2c31e42309e3f5516e642a80c3072b2ebb2b1b37 /sys/dev/pccbb | |
parent | 5b7662dfe9883a7e44fa22ced316b437cc59aaeb (diff) | |
download | FreeBSD-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.c | 6 |
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)); } |