diff options
author | silby <silby@FreeBSD.org> | 2002-04-26 02:07:46 +0000 |
---|---|---|
committer | silby <silby@FreeBSD.org> | 2002-04-26 02:07:46 +0000 |
commit | dd3cd5fed6df2d8b97036107ac5ef6e2b04bf7e8 (patch) | |
tree | e3d11ae343cdd5c86800f10650b42963d5e33da1 /sys/kern/uipc_socket.c | |
parent | 522debf4fd85d981f5118693ad97663ad0d16c6b (diff) | |
download | FreeBSD-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.c | 3 |
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)); } |