summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authoraugustss <augustss@NetBSD.org>1999-10-28 07:28:51 +0000
committeraugustss <augustss@NetBSD.org>1999-10-28 07:28:51 +0000
commit357dc256c99136724fd503fbe0b2474022e7a103 (patch)
tree93153a66d75882054860b1c6e3c7ca9359deeee4 /sys/dev
parenta6e07f236b24225da66d337901698bd6529805e3 (diff)
Make sure read() and write() fails on the control pipe.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/usb/ugen.c16
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);