diff options
| author | ad <ad@NetBSD.org> | 2001-01-03 21:17:05 +0000 |
|---|---|---|
| committer | ad <ad@NetBSD.org> | 2001-01-03 21:17:05 +0000 |
| commit | a06fc2bf4b1479bf12a47e2ab5d5c6062f13e110 (patch) | |
| tree | 72e7e68c617ce9ba990a4413b00bd188657b504c /sys/dev | |
| parent | 5fcbd5f72228328e4d0c7808ce07c78116b75202 (diff) | |
Fix thinko in previous.
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/i2o/iop.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/sys/dev/i2o/iop.c b/sys/dev/i2o/iop.c index a03d5da51c5..ba03ac4b45c 100644 --- a/sys/dev/i2o/iop.c +++ b/sys/dev/i2o/iop.c @@ -1,4 +1,4 @@ -/* $NetBSD: iop.c,v 1.9 2001/01/03 21:04:01 ad Exp $ */ +/* $NetBSD: iop.c,v 1.10 2001/01/03 21:17:05 ad Exp $ */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. @@ -2065,8 +2065,10 @@ iopioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) break; } for (i = 0; i < pt->pt_nbufs; i++) - if (pt->pt_bufs[i].ptb_datalen > ((MAXPHYS + 3) & ~3)) - return (ENOMEM); + if (pt->pt_bufs[i].ptb_datalen > ((MAXPHYS + 3) & ~3)) { + rv = ENOMEM; + goto bad; + } rv = iop_msg_alloc(sc, NULL, &im, IM_NOINTR | IM_NOSTATUS); if (rv != 0) @@ -2085,15 +2087,18 @@ iopioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) ptb = &pt->pt_bufs[i]; buf = sc->sc_ptb + i * ((MAXPHYS + 3) & ~3); - if (ptb->ptb_out != 0) + if (ptb->ptb_out != 0) { rv = copyin(ptb->ptb_data, buf, ptb->ptb_datalen); + if (rv != 0) + goto bad; + } rv = iop_msg_map(sc, im, buf, ptb->ptb_datalen, ptb->ptb_out != 0); if (rv != 0) { iop_msg_free(sc, NULL, im); - break; + goto bad; } } @@ -2169,7 +2174,7 @@ iopioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) break; } +bad: PRELE(p); - return (rv); } |
