diff options
author | scottl <scottl@FreeBSD.org> | 2006-03-28 01:59:11 +0000 |
---|---|---|
committer | scottl <scottl@FreeBSD.org> | 2006-03-28 01:59:11 +0000 |
commit | b99f1961b8b3456fa23cc4113117f8f1139d5c60 (patch) | |
tree | c865fcd6e6867a07613b7e8410bcc7bdbe3962aa /sys/dev/mfi | |
parent | d76f24935a05d27513e151190d3cf476d0215bf2 (diff) | |
download | FreeBSD-src-b99f1961b8b3456fa23cc4113117f8f1139d5c60.zip FreeBSD-src-b99f1961b8b3456fa23cc4113117f8f1139d5c60.tar.gz |
Handle invalid capacity parameters from the firmware.
Diffstat (limited to 'sys/dev/mfi')
-rw-r--r-- | sys/dev/mfi/mfi.c | 7 | ||||
-rw-r--r-- | sys/dev/mfi/mfi_disk.c | 1 |
2 files changed, 7 insertions, 1 deletions
diff --git a/sys/dev/mfi/mfi.c b/sys/dev/mfi/mfi.c index 8efc0c0..064252e 100644 --- a/sys/dev/mfi/mfi.c +++ b/sys/dev/mfi/mfi.c @@ -911,6 +911,12 @@ mfi_add_ld(struct mfi_softc *sc, int id, uint64_t sectors, uint32_t secsize) struct mfi_ld *ld; device_t child; + if ((secsize == 0) || (sectors == 0)) { + device_printf(sc->mfi_dev, "Invalid capacity parameters for " + "logical disk %d\n", id); + return (EINVAL); + } + ld = malloc(sizeof(struct mfi_ld), M_MFIBUF, M_NOWAIT|M_ZERO); if (ld == NULL) { device_printf(sc->mfi_dev, "Cannot allocate ld\n"); @@ -929,7 +935,6 @@ mfi_add_ld(struct mfi_softc *sc, int id, uint64_t sectors, uint32_t secsize) device_set_ivars(child, ld); device_set_desc(child, "MFI Logical Disk"); - TAILQ_INSERT_TAIL(&sc->mfi_ld_tqh, ld, ld_link); mtx_unlock(&sc->mfi_io_lock); mtx_lock(&Giant); bus_generic_attach(sc->mfi_dev); diff --git a/sys/dev/mfi/mfi_disk.c b/sys/dev/mfi/mfi_disk.c index 03b0459..dbba704 100644 --- a/sys/dev/mfi/mfi_disk.c +++ b/sys/dev/mfi/mfi_disk.c @@ -119,6 +119,7 @@ mfi_disk_attach(device_t dev) free(sc->ld_ld, M_MFIBUF); return (EINVAL); } + TAILQ_INSERT_TAIL(&sc->ld_controller->mfi_ld_tqh, ld, ld_link); device_printf(dev, "%juMB (%ju sectors) RAID\n", sectors / (1024 * 1024 / secsize), sectors); |