diff options
| author | Brian Feldman <green@FreeBSD.org> | 1999-10-14 05:37:52 +0000 |
|---|---|---|
| committer | Brian Feldman <green@FreeBSD.org> | 1999-10-14 05:37:52 +0000 |
| commit | 1aa3e7ddd0c0c9583cce288893fcdf124c57b4c9 (patch) | |
| tree | 7f7118b577e4903d6b34998437bb07c30d3a43bf /sys/kern/sys_generic.c | |
| parent | afce0034532569734bed6027a1468bedc20c352d (diff) | |
Notes
Diffstat (limited to 'sys/kern/sys_generic.c')
| -rw-r--r-- | sys/kern/sys_generic.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c index 8eb0efeb2740..88c7d7f6bdb3 100644 --- a/sys/kern/sys_generic.c +++ b/sys/kern/sys_generic.c @@ -405,11 +405,15 @@ writev(p, uap) if ((fp = getfp(fdp, uap->fd, FWRITE)) == NULL) return (EBADF); + fhold(fp); /* note: can't use iovlen until iovcnt is validated */ iovlen = uap->iovcnt * sizeof (struct iovec); if (uap->iovcnt > UIO_SMALLIOV) { - if (uap->iovcnt > UIO_MAXIOV) - return (EINVAL); + if (uap->iovcnt > UIO_MAXIOV) { + needfree = NULL; + error = EINVAL; + goto done; + } MALLOC(iov, struct iovec *, iovlen, M_IOV, M_WAITOK); needfree = iov; } else { @@ -461,6 +465,7 @@ writev(p, uap) #endif p->p_retval[0] = cnt; done: + fdrop(fp); if (needfree) FREE(needfree, M_IOV); return (error); |
