From owner-svn-src-head@freebsd.org Fri Apr 14 09:00:49 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EA2EBD3D437; Fri, 14 Apr 2017 09:00:49 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A07B4DB3; Fri, 14 Apr 2017 09:00:49 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v3E90mni030552; Fri, 14 Apr 2017 09:00:48 GMT (envelope-from ae@FreeBSD.org) Received: (from ae@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v3E90mJU030549; Fri, 14 Apr 2017 09:00:48 GMT (envelope-from ae@FreeBSD.org) Message-Id: <201704140900.v3E90mJU030549@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ae set sender to ae@FreeBSD.org using -f From: "Andrey V. Elsukov" Date: Fri, 14 Apr 2017 09:00:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r316822 - in head/sys: kern netinet netinet6 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Apr 2017 09:00:50 -0000 Author: ae Date: Fri Apr 14 09:00:48 2017 New Revision: 316822 URL: https://svnweb.freebsd.org/changeset/base/316822 Log: Rework r316770 to make it protocol independent and general, like we do for streaming sockets. And do more cleanup in the sbappendaddr_locked_internal() to prevent leak information from existing mbuf to the one, that will be possible created later by netgraph. Suggested by: glebius Tested by: Irina Liakh MFC after: 1 week Modified: head/sys/kern/uipc_sockbuf.c head/sys/netinet/udp_usrreq.c head/sys/netinet6/udp6_usrreq.c Modified: head/sys/kern/uipc_sockbuf.c ============================================================================== --- head/sys/kern/uipc_sockbuf.c Fri Apr 14 08:27:42 2017 (r316821) +++ head/sys/kern/uipc_sockbuf.c Fri Apr 14 09:00:48 2017 (r316822) @@ -794,8 +794,20 @@ sbappendaddr_locked_internal(struct sock return (0); m->m_len = asa->sa_len; bcopy(asa, mtod(m, caddr_t), asa->sa_len); - if (m0) + if (m0) { m_clrprotoflags(m0); + m_tag_delete_chain(m0); + /* + * Clear some persistent info from pkthdr. + * We don't use m_demote(), because some netgraph consumers + * expect M_PKTHDR presence. + */ + m0->m_pkthdr.rcvif = NULL; + m0->m_pkthdr.flowid = 0; + m0->m_pkthdr.csum_flags = 0; + m0->m_pkthdr.fibnum = 0; + m0->m_pkthdr.rsstype = 0; + } if (ctrl_last) ctrl_last->m_next = m0; /* concatenate data to control */ else Modified: head/sys/netinet/udp_usrreq.c ============================================================================== --- head/sys/netinet/udp_usrreq.c Fri Apr 14 08:27:42 2017 (r316821) +++ head/sys/netinet/udp_usrreq.c Fri Apr 14 09:00:48 2017 (r316822) @@ -372,9 +372,6 @@ udp_append(struct inpcb *inp, struct ip append_sa = (struct sockaddr *)&udp_in[0]; m_adj(n, off); - /* Clear any h/w csum flags as they are no longer valid. */ - n->m_pkthdr.csum_flags &= ~(CSUM_DATA_VALID | CSUM_IP_VALID); - so = inp->inp_socket; SOCKBUF_LOCK(&so->so_rcv); if (sbappendaddr_locked(&so->so_rcv, append_sa, n, opts) == 0) { Modified: head/sys/netinet6/udp6_usrreq.c ============================================================================== --- head/sys/netinet6/udp6_usrreq.c Fri Apr 14 08:27:42 2017 (r316821) +++ head/sys/netinet6/udp6_usrreq.c Fri Apr 14 09:00:48 2017 (r316822) @@ -187,9 +187,6 @@ udp6_append(struct inpcb *inp, struct mb } m_adj(n, off + sizeof(struct udphdr)); - /* Clear any h/w csum flags as they are no longer valid. */ - n->m_pkthdr.csum_flags &= ~CSUM_DATA_VALID; - so = inp->inp_socket; SOCKBUF_LOCK(&so->so_rcv); if (sbappendaddr_locked(&so->so_rcv, (struct sockaddr *)&fromsa[0], n,