hi,
while looking for the device_unref bugs, i found that
vscsi doesn't check if device_lookup has returned a
valid return value.
ok?
diff --git sys/dev/vscsi.c sys/dev/vscsi.c
index 3da371c..db65642 100644
--- sys/dev/vscsi.c
+++ sys/dev/vscsi.c
@@ -296,6 +296,9 @@ vscsiioctl(dev_t dev, u_long cmd, caddr_t addr, int flags,
struct proc *p)
int read = 0;
int err = 0;
+ if (sc == NULL)
+ return (ENXIO);
+
rw_enter_write(&sc->sc_ioc_lock);
switch (cmd) {
@@ -476,6 +479,9 @@ vscsipoll(dev_t dev, int events, struct proc *p)
struct vscsi_softc *sc = DEV2SC(dev);
int revents = 0;
+ if (sc == NULL)
+ return (ENXIO);
+
if (events & (POLLIN | POLLRDNORM)) {
mtx_enter(&sc->sc_state_mtx);
if (!TAILQ_EMPTY(&sc->sc_ccb_i2t))
@@ -494,9 +500,14 @@ vscsipoll(dev_t dev, int events, struct proc *p)
int
vscsikqfilter(dev_t dev, struct knote *kn)
-{
+{
struct vscsi_softc *sc = DEV2SC(dev);
- struct klist *klist = &sc->sc_sel.si_note;
+ struct klist *klist;
+
+ if (sc == NULL)
+ return (ENXIO);
+
+ klist = &sc->sc_sel.si_note;
switch (kn->kn_filter) {
case EVFILT_READ: