diff options
author | guido <guido@FreeBSD.org> | 1999-09-30 19:13:17 +0000 |
---|---|---|
committer | guido <guido@FreeBSD.org> | 1999-09-30 19:13:17 +0000 |
commit | 4a4f1cc7585921a0a996fae8e578d62e4682b951 (patch) | |
tree | 803f5c841038cb3c59b3b84ea6ec0846a1e501a5 /sys/kern/uipc_syscalls.c | |
parent | caea2233d5bd4987a92d18bc59e01781fcdcdd85 (diff) | |
download | FreeBSD-src-4a4f1cc7585921a0a996fae8e578d62e4682b951.zip FreeBSD-src-4a4f1cc7585921a0a996fae8e578d62e4682b951.tar.gz |
Plug a potential filedescriptor leak. This will probably almost
never be triggered.
Reviewed by: David Greenman
Diffstat (limited to 'sys/kern/uipc_syscalls.c')
-rw-r--r-- | sys/kern/uipc_syscalls.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c index b87114d..8048cdb 100644 --- a/sys/kern/uipc_syscalls.c +++ b/sys/kern/uipc_syscalls.c @@ -185,6 +185,7 @@ accept1(p, uap, compat) } */ *uap; int compat; { + struct filedesc *fdp = p->p_fd; struct file *fp; struct sockaddr *sa; int namelen, error, s; @@ -198,7 +199,7 @@ accept1(p, uap, compat) if(error) return (error); } - error = getsock(p->p_fd, uap->s, &fp); + error = getsock(fdp, uap->s, &fp); if (error) return (error); s = splnet(); @@ -292,6 +293,10 @@ gotnoname: } if (sa) FREE(sa, M_SONAME); + if (error) { + fdp->fd_ofiles[fd] = 0; + ffree(fp); + } splx(s); return (error); } |