diff options
| author | augustss <augustss@NetBSD.org> | 1999-10-28 07:28:51 +0000 |
|---|---|---|
| committer | augustss <augustss@NetBSD.org> | 1999-10-28 07:28:51 +0000 |
| commit | 357dc256c99136724fd503fbe0b2474022e7a103 (patch) | |
| tree | 93153a66d75882054860b1c6e3c7ca9359deeee4 /sys/dev | |
| parent | a6e07f236b24225da66d337901698bd6529805e3 (diff) | |
Make sure read() and write() fails on the control pipe.
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/usb/ugen.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/sys/dev/usb/ugen.c b/sys/dev/usb/ugen.c index 5938678ec2f..0c9580902bc 100644 --- a/sys/dev/usb/ugen.c +++ b/sys/dev/usb/ugen.c @@ -1,4 +1,4 @@ -/* $NetBSD: ugen.c,v 1.25 1999/10/13 08:10:55 augustss Exp $ */ +/* $NetBSD: ugen.c,v 1.26 1999/10/28 07:28:51 augustss Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -293,8 +293,6 @@ ugenopen(dev, flag, mode, p) DPRINTFN(5, ("ugenopen: sc=%p, endpt=%d, dir=%d, sce=%p\n", sc, endpt, dir, sce)); edesc = sce->edesc; - if (!edesc) - return (ENXIO); switch (edesc->bmAttributes & UE_XFERTYPE) { case UE_INTERRUPT: isize = UGETW(edesc->wMaxPacketSize); @@ -404,9 +402,13 @@ ugen_do_read(sc, endpt, uio, flag) #ifdef __NetBSD__ DPRINTFN(5, ("ugenread: %d:%d\n", sc->sc_dev.dv_unit, endpt)); #endif + if (sc->sc_dying) return (EIO); + if (endpt == USB_CONTROL_ENDPOINT) + return (ENODEV); + #ifdef DIAGNOSTIC if (!sce->edesc) { printf("ugenread: no edesc\n"); @@ -522,9 +524,16 @@ ugen_do_write(sc, endpt, uio, flag) usbd_request_handle reqh; usbd_status r; +#ifdef __NetBSD__ + DPRINTFN(5, ("ugenwrite: %d:%d\n", sc->sc_dev.dv_unit, endpt)); +#endif + if (sc->sc_dying) return (EIO); + if (endpt == USB_CONTROL_ENDPOINT) + return (ENODEV); + #ifdef DIAGNOSTIC if (!sce->edesc) { printf("ugenwrite: no edesc\n"); @@ -536,7 +545,6 @@ ugen_do_write(sc, endpt, uio, flag) } #endif - DPRINTF(("ugenwrite\n")); switch (sce->edesc->bmAttributes & UE_XFERTYPE) { case UE_BULK: reqh = usbd_alloc_request(sc->sc_udev); |
