summaryrefslogtreecommitdiffstats
path: root/sys/kern/uipc_socket.c
diff options
context:
space:
mode:
authorsilby <silby@FreeBSD.org>2002-04-26 02:07:46 +0000
committersilby <silby@FreeBSD.org>2002-04-26 02:07:46 +0000
commitdd3cd5fed6df2d8b97036107ac5ef6e2b04bf7e8 (patch)
treee3d11ae343cdd5c86800f10650b42963d5e33da1 /sys/kern/uipc_socket.c
parent522debf4fd85d981f5118693ad97663ad0d16c6b (diff)
downloadFreeBSD-src-dd3cd5fed6df2d8b97036107ac5ef6e2b04bf7e8.zip
FreeBSD-src-dd3cd5fed6df2d8b97036107ac5ef6e2b04bf7e8.tar.gz
Make sure that sockets undergoing accept filtering are aborted in a
LRU fashion when the listen queue fills up. Previously, there was no mechanism to kick out old sockets, leading to an easy DoS of daemons using accept filtering. Reviewed by: alfred MFC after: 3 days
Diffstat (limited to 'sys/kern/uipc_socket.c')
-rw-r--r--sys/kern/uipc_socket.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
index 6c68a79..0e0fbd9 100644
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -281,7 +281,6 @@ sofree(so)
} else {
panic("sofree: not queued");
}
- head->so_qlen--;
so->so_state &= ~SS_INCOMP;
so->so_head = NULL;
}
@@ -1674,7 +1673,7 @@ filt_solisten(struct knote *kn, long hint)
{
struct socket *so = (struct socket *)kn->kn_fp->f_data;
- kn->kn_data = so->so_qlen - so->so_incqlen;
+ kn->kn_data = so->so_qlen;
return (! TAILQ_EMPTY(&so->so_comp));
}
OpenPOWER on IntegriCloud