summaryrefslogtreecommitdiffstats
path: root/sys/netinet/tcp_input.c
diff options
context:
space:
mode:
authoritojun <itojun@openbsd.org>2002-09-05 23:37:35 +0000
committeritojun <itojun@openbsd.org>2002-09-05 23:37:35 +0000
commit037b7f4467d84d2752e1750af0c5f0568653807c (patch)
tree297f1ec404464605ccbc6bdfa4a6aa5ccdbb1d52 /sys/netinet/tcp_input.c
parentimport openssl-0.9.7-beta3 (diff)
downloadwireguard-openbsd-037b7f4467d84d2752e1750af0c5f0568653807c.tar.xz
wireguard-openbsd-037b7f4467d84d2752e1750af0c5f0568653807c.zip
never append data to shutdown(s, SHUT_RD) socket. can lead to unexpected
kernel resource consumption. NetBSD PR 18185
Diffstat (limited to 'sys/netinet/tcp_input.c')
-rw-r--r--sys/netinet/tcp_input.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
index 6cbfc9fc881..7800291b3e8 100644
--- a/sys/netinet/tcp_input.c
+++ b/sys/netinet/tcp_input.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tcp_input.c,v 1.122 2002/08/19 02:31:02 itojun Exp $ */
+/* $OpenBSD: tcp_input.c,v 1.123 2002/09/05 23:37:35 itojun Exp $ */
/* $NetBSD: tcp_input.c,v 1.23 1996/02/13 23:43:44 christos Exp $ */
/*
@@ -1077,8 +1077,12 @@ findpcb:
* Drop TCP, IP headers and TCP options then add data
* to socket buffer.
*/
- m_adj(m, iphlen + off);
- sbappendstream(&so->so_rcv, m);
+ if (so->so_state & SS_CANTRCVMORE)
+ m_freem(m);
+ else {
+ m_adj(m, iphlen + off);
+ sbappendstream(&so->so_rcv, m);
+ }
sorwakeup(so);
TCP_SETUP_ACK(tp, tiflags);
if (tp->t_flags & TF_ACKNOW)
@@ -2156,8 +2160,12 @@ dodata: /* XXX */
tcpstat.tcps_rcvpack++;
tcpstat.tcps_rcvbyte += tlen;
ND6_HINT(tp);
- m_adj(m, hdroptlen);
- sbappendstream(&so->so_rcv, m);
+ if (so->so_state & SS_CANTRCVMORE)
+ m_freem(m);
+ else {
+ m_adj(m, hdroptlen);
+ sbappendstream(&so->so_rcv, m);
+ }
sorwakeup(so);
} else {
m_adj(m, hdroptlen);