From 037b7f4467d84d2752e1750af0c5f0568653807c Mon Sep 17 00:00:00 2001 From: itojun Date: Thu, 5 Sep 2002 23:37:35 +0000 Subject: never append data to shutdown(s, SHUT_RD) socket. can lead to unexpected kernel resource consumption. NetBSD PR 18185 --- sys/netinet/tcp_input.c | 18 +++++++++++++----- 1 file 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); -- cgit v1.2.3-59-g8ed1b