diff options
| author | augustss <augustss@NetBSD.org> | 2002-04-23 06:34:11 +0000 |
|---|---|---|
| committer | augustss <augustss@NetBSD.org> | 2002-04-23 06:34:11 +0000 |
| commit | 0405958cec2bccaa5bdebb8ef8eb6de938fb6538 (patch) | |
| tree | aaf4f9e8f7febe003aba3e4f6aace352636361b8 /sys/dev | |
| parent | f3e8a130b88172310cb540c27f366a5f341a4292 (diff) | |
Check for write permission for some ioctls.
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/usb/usb.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/dev/usb/usb.c b/sys/dev/usb/usb.c index f406c5f3e0e..9e408673443 100644 --- a/sys/dev/usb/usb.c +++ b/sys/dev/usb/usb.c @@ -1,4 +1,4 @@ -/* $NetBSD: usb.c,v 1.68 2002/02/20 20:30:12 christos Exp $ */ +/* $NetBSD: usb.c,v 1.69 2002/04/23 06:34:11 augustss Exp $ */ /* * Copyright (c) 1998, 2002 The NetBSD Foundation, Inc. @@ -44,7 +44,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: usb.c,v 1.68 2002/02/20 20:30:12 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: usb.c,v 1.69 2002/04/23 06:34:11 augustss Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -54,6 +54,7 @@ __KERNEL_RCSID(0, "$NetBSD: usb.c,v 1.68 2002/02/20 20:30:12 christos Exp $"); #include <sys/kthread.h> #include <sys/proc.h> #include <sys/conf.h> +#include <sys/fcntl.h> #include <sys/poll.h> #include <sys/select.h> #include <sys/vnode.h> @@ -466,6 +467,8 @@ usbioctl(dev_t devt, u_long cmd, caddr_t data, int flag, usb_proc_ptr p) switch (cmd) { #ifdef USB_DEBUG case USB_SETDEBUG: + if (!(flag & FWRITE)) + return (EBADF); usbdebug = ((*(int *)data) & 0x000000ff); #ifdef UHCI_DEBUG uhcidebug = ((*(int *)data) & 0x0000ff00) >> 8; @@ -486,6 +489,9 @@ usbioctl(dev_t devt, u_long cmd, caddr_t data, int flag, usb_proc_ptr p) usbd_status err; int error = 0; + if (!(flag & FWRITE)) + return (EBADF); + DPRINTF(("usbioctl: USB_REQUEST addr=%d len=%d\n", addr, len)); if (len < 0 || len > 32768) return (EINVAL); |
