diff options
author | Visa Hankala <visa@cvs.openbsd.org> | 2018-08-24 12:45:28 +0000 |
---|---|---|
committer | Visa Hankala <visa@cvs.openbsd.org> | 2018-08-24 12:45:28 +0000 |
commit | 40cdefb1095e3a14eea7552a1c6125e2736b4c99 (patch) | |
tree | ddb1528bd1510bf5947b0171d2fcb9ebb8ccdf33 /sys/kern | |
parent | 682a16aae303f2f1d3d3aeddc5eabf659a0a80c9 (diff) |
Remove all knotes from a file descriptor before closing the file in
fdfree(). This fixes a resource leak with cyclic kqueue references and
prevents a kernel stack exhaustion scenario with long kqueue chains.
OK mpi@
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/kern_descrip.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c index a36a22f6b4b..f998b9c9147 100644 --- a/sys/kern/kern_descrip.c +++ b/sys/kern/kern_descrip.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_descrip.c,v 1.181 2018/08/21 13:50:31 visa Exp $ */ +/* $OpenBSD: kern_descrip.c,v 1.182 2018/08/24 12:45:27 visa Exp $ */ /* $NetBSD: kern_descrip.c,v 1.42 1996/03/30 22:24:38 christos Exp $ */ /* @@ -1169,6 +1169,7 @@ fdfree(struct proc *p) fp = fdp->fd_ofiles[fd]; if (fp != NULL) { fdp->fd_ofiles[fd] = NULL; + knote_fdclose(p, fd); /* closef() expects a refcount of 2 */ FREF(fp); (void) closef(fp, p); |