From owner-svn-src-user@FreeBSD.ORG Thu Feb 7 18:00:34 2013 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 2D805BD; Thu, 7 Feb 2013 18:00:34 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 1D3D919B; Thu, 7 Feb 2013 18:00:34 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.5/8.14.5) with ESMTP id r17I0XG8047999; Thu, 7 Feb 2013 18:00:33 GMT (envelope-from ae@svn.freebsd.org) Received: (from ae@localhost) by svn.freebsd.org (8.14.5/8.14.5/Submit) id r17I0Xno047998; Thu, 7 Feb 2013 18:00:33 GMT (envelope-from ae@svn.freebsd.org) Message-Id: <201302071800.r17I0Xno047998@svn.freebsd.org> From: "Andrey V. Elsukov" Date: Thu, 7 Feb 2013 18:00:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r246493 - user/ae/inet6/sys/netinet6 X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Feb 2013 18:00:34 -0000 Author: ae Date: Thu Feb 7 18:00:33 2013 New Revision: 246493 URL: http://svnweb.freebsd.org/changeset/base/246493 Log: Check that packets with loopback source addresses received on the correct interface before multicast check. Also add missed ifa_free. Modified: user/ae/inet6/sys/netinet6/ip6_input.c Modified: user/ae/inet6/sys/netinet6/ip6_input.c ============================================================================== --- user/ae/inet6/sys/netinet6/ip6_input.c Thu Feb 7 17:23:03 2013 (r246492) +++ user/ae/inet6/sys/netinet6/ip6_input.c Thu Feb 7 18:00:33 2013 (r246493) @@ -653,6 +653,18 @@ ip6_input(struct mbuf *m) } passin: + srcscope = in6_addrscope(&ip6->ip6_src); + if (srcscope == IPV6_ADDR_SCOPE_LINKLOCAL && + IN6_IS_ADDR_LOOPBACK(&ip6->ip6_src)) { + /* + * Packets with the loopback source address must be + * received on the loopback interface. + */ + if (m->m_pkthdr.rcvif != V_loif) { + V_ip6stat.ip6s_badscope++; + goto bad; + } + } /* * Multicast check. Assume packet is for us to avoid * prematurely taking locks. @@ -666,19 +678,7 @@ passin: /* * Unicast check */ - srcscope = in6_addrscope(&ip6->ip6_src); dstscope = in6_addrscope(&ip6->ip6_dst); - if (srcscope == IPV6_ADDR_SCOPE_LINKLOCAL && - IN6_IS_ADDR_LOOPBACK(&ip6->ip6_src)) { - /* - * Packets with the loopback source address must be - * received on the loopback interface. - */ - if (m->m_pkthdr.rcvif != V_loif) { - V_ip6stat.ip6s_badscope++; - goto bad; - } - } ia = in6ifa_ifwithaddr(&ip6->ip6_dst, in6_getscopezone(m->m_pkthdr.rcvif, dstscope)); if (ia == NULL) { @@ -701,6 +701,7 @@ passin: "ip6_input: packet to an unready address %s->%s\n", ip6_sprintf(ip6bufs, &ip6->ip6_src), ip6_sprintf(ip6bufd, &ip6->ip6_dst))); + ifa_free(&ia->ia_ifa); goto bad; } /* Count the packet in the ip address stats */