Module Name: src Committed By: ozaki-r Date: Tue Jun 28 02:02:56 UTC 2016
Modified Files: src/sys/net: if_pppoe.c src/sys/netinet: if_arp.c igmp.c ip_input.c src/sys/netinet6: icmp6.c in6_gif.c ip6_forward.c Log Message: Add missing NULL checks for m_get_rcvif_psref To generate a diff of this commit: cvs rdiff -u -r1.109 -r1.110 src/sys/net/if_pppoe.c cvs rdiff -u -r1.212 -r1.213 src/sys/netinet/if_arp.c cvs rdiff -u -r1.59 -r1.60 src/sys/netinet/igmp.c cvs rdiff -u -r1.329 -r1.330 src/sys/netinet/ip_input.c cvs rdiff -u -r1.189 -r1.190 src/sys/netinet6/icmp6.c cvs rdiff -u -r1.74 -r1.75 src/sys/netinet6/in6_gif.c cvs rdiff -u -r1.79 -r1.80 src/sys/netinet6/ip6_forward.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/net/if_pppoe.c diff -u src/sys/net/if_pppoe.c:1.109 src/sys/net/if_pppoe.c:1.110 --- src/sys/net/if_pppoe.c:1.109 Mon Jun 20 06:46:37 2016 +++ src/sys/net/if_pppoe.c Tue Jun 28 02:02:56 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_pppoe.c,v 1.109 2016/06/20 06:46:37 knakahara Exp $ */ +/* $NetBSD: if_pppoe.c,v 1.110 2016/06/28 02:02:56 ozaki-r Exp $ */ /*- * Copyright (c) 2002, 2008 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_pppoe.c,v 1.109 2016/06/20 06:46:37 knakahara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_pppoe.c,v 1.110 2016/06/28 02:02:56 ozaki-r Exp $"); #include "pppoe.h" @@ -803,6 +803,8 @@ pppoe_data_input(struct mbuf *m) session = ntohs(ph->session); rcvif = m_get_rcvif_psref(m, &psref); + if (__predict_false(rcvif == NULL)) + goto drop; sc = pppoe_find_softc_by_session(session, rcvif); if (sc == NULL) { #ifdef PPPOE_TERM_UNKNOWN_SESSIONS Index: src/sys/netinet/if_arp.c diff -u src/sys/netinet/if_arp.c:1.212 src/sys/netinet/if_arp.c:1.213 --- src/sys/netinet/if_arp.c:1.212 Mon Jun 20 06:46:38 2016 +++ src/sys/netinet/if_arp.c Tue Jun 28 02:02:56 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_arp.c,v 1.212 2016/06/20 06:46:38 knakahara Exp $ */ +/* $NetBSD: if_arp.c,v 1.213 2016/06/28 02:02:56 ozaki-r Exp $ */ /*- * Copyright (c) 1998, 2000, 2008 The NetBSD Foundation, Inc. @@ -68,7 +68,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.212 2016/06/20 06:46:38 knakahara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.213 2016/06/28 02:02:56 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_ddb.h" @@ -981,6 +981,8 @@ in_arpinput(struct mbuf *m) op = ntohs(ah->ar_op); rcvif = ifp = m_get_rcvif_psref(m, &psref); + if (__predict_false(rcvif == NULL)) + goto drop; /* * Fix up ah->ar_hrd if necessary, before using ar_tha() or * ar_tpa(). Index: src/sys/netinet/igmp.c diff -u src/sys/netinet/igmp.c:1.59 src/sys/netinet/igmp.c:1.60 --- src/sys/netinet/igmp.c:1.59 Tue Jun 21 03:28:27 2016 +++ src/sys/netinet/igmp.c Tue Jun 28 02:02:56 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: igmp.c,v 1.59 2016/06/21 03:28:27 ozaki-r Exp $ */ +/* $NetBSD: igmp.c,v 1.60 2016/06/28 02:02:56 ozaki-r Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -40,7 +40,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: igmp.c,v 1.59 2016/06/21 03:28:27 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: igmp.c,v 1.60 2016/06/28 02:02:56 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_mrouting.h" @@ -236,6 +236,9 @@ igmp_input(struct mbuf *m, ...) m->m_len += iphlen; ifp = m_get_rcvif_psref(m, &psref); + if (__predict_false(ifp == NULL)) + goto drop; + switch (igmp->igmp_type) { case IGMP_HOST_MEMBERSHIP_QUERY: Index: src/sys/netinet/ip_input.c diff -u src/sys/netinet/ip_input.c:1.329 src/sys/netinet/ip_input.c:1.330 --- src/sys/netinet/ip_input.c:1.329 Fri Jun 10 13:31:44 2016 +++ src/sys/netinet/ip_input.c Tue Jun 28 02:02:56 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ip_input.c,v 1.329 2016/06/10 13:31:44 ozaki-r Exp $ */ +/* $NetBSD: ip_input.c,v 1.330 2016/06/28 02:02:56 ozaki-r Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -91,7 +91,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip_input.c,v 1.329 2016/06/10 13:31:44 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip_input.c,v 1.330 2016/06/28 02:02:56 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -383,6 +383,8 @@ ip_input(struct mbuf *m) KASSERT((m->m_flags & M_PKTHDR) != 0); ifp = m_get_rcvif_psref(m, &psref); + if (__predict_false(ifp == NULL)) + goto bad; /* * If no IP addresses have been set yet but the interfaces @@ -1060,6 +1062,11 @@ ip_dooptions(struct mbuf *m) } rcvif = m_get_rcvif_psref(m, &psref); + if (__predict_false(rcvif == NULL)) { + type = ICMP_UNREACH; + code = ICMP_UNREACH_HOST; + goto bad; + } ip_forward(m, 1, rcvif); m_put_rcvif_psref(rcvif, &psref); return true; @@ -1387,6 +1394,9 @@ ip_savecontrol(struct inpcb *inp, struct struct psref psref; ifp = m_get_rcvif_psref(m, &psref); + if (__predict_false(ifp == NULL)) + return; /* XXX should report error? */ + if (so->so_options & SO_TIMESTAMP #ifdef SO_OTIMESTAMP || so->so_options & SO_OTIMESTAMP Index: src/sys/netinet6/icmp6.c diff -u src/sys/netinet6/icmp6.c:1.189 src/sys/netinet6/icmp6.c:1.190 --- src/sys/netinet6/icmp6.c:1.189 Tue Jun 21 10:25:27 2016 +++ src/sys/netinet6/icmp6.c Tue Jun 28 02:02:56 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: icmp6.c,v 1.189 2016/06/21 10:25:27 ozaki-r Exp $ */ +/* $NetBSD: icmp6.c,v 1.190 2016/06/28 02:02:56 ozaki-r Exp $ */ /* $KAME: icmp6.c,v 1.217 2001/06/20 15:03:29 jinmei Exp $ */ /* @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: icmp6.c,v 1.189 2016/06/21 10:25:27 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: icmp6.c,v 1.190 2016/06/28 02:02:56 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -457,6 +457,9 @@ icmp6_input(struct mbuf **mp, int *offp, struct psref psref; rcvif = m_get_rcvif_psref(m, &psref); + if (__predict_false(rcvif == NULL)) + goto freeit; + #define ICMP6_MAXLEN (sizeof(*nip6) + sizeof(*nicmp6) + 4) KASSERT(ICMP6_MAXLEN < MCLBYTES); icmp6_ifstat_inc(rcvif, ifs6_in_msg); Index: src/sys/netinet6/in6_gif.c diff -u src/sys/netinet6/in6_gif.c:1.74 src/sys/netinet6/in6_gif.c:1.75 --- src/sys/netinet6/in6_gif.c:1.74 Fri Jun 10 13:31:44 2016 +++ src/sys/netinet6/in6_gif.c Tue Jun 28 02:02:56 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: in6_gif.c,v 1.74 2016/06/10 13:31:44 ozaki-r Exp $ */ +/* $NetBSD: in6_gif.c,v 1.75 2016/06/28 02:02:56 ozaki-r Exp $ */ /* $KAME: in6_gif.c,v 1.62 2001/07/29 04:27:25 itojun Exp $ */ /* @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in6_gif.c,v 1.74 2016/06/10 13:31:44 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in6_gif.c,v 1.75 2016/06/28 02:02:56 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -231,7 +231,7 @@ in6_gif_input(struct mbuf **mp, int *off struct psref psref; struct ifnet *rcvif = m_get_rcvif_psref(m, &psref); - if (!gif_validate6(ip6, sc, rcvif)) { + if (rcvif == NULL || !gif_validate6(ip6, sc, rcvif)) { m_put_rcvif_psref(rcvif, &psref); m_freem(m); IP6_STATINC(IP6_STAT_NOGIF); Index: src/sys/netinet6/ip6_forward.c diff -u src/sys/netinet6/ip6_forward.c:1.79 src/sys/netinet6/ip6_forward.c:1.80 --- src/sys/netinet6/ip6_forward.c:1.79 Fri Jun 10 13:31:44 2016 +++ src/sys/netinet6/ip6_forward.c Tue Jun 28 02:02:56 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ip6_forward.c,v 1.79 2016/06/10 13:31:44 ozaki-r Exp $ */ +/* $NetBSD: ip6_forward.c,v 1.80 2016/06/28 02:02:56 ozaki-r Exp $ */ /* $KAME: ip6_forward.c,v 1.109 2002/09/11 08:10:17 sakane Exp $ */ /* @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip6_forward.c,v 1.79 2016/06/10 13:31:44 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip6_forward.c,v 1.80 2016/06/28 02:02:56 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_gateway.h" @@ -146,6 +146,9 @@ ip6_forward(struct mbuf *m, int srcrt) m->m_pkthdr.csum_flags = 0; rcvif = m_get_rcvif_psref(m, &psref); + if (__predict_false(rcvif == NULL)) + goto drop; + /* * Do not forward packets to multicast destination (should be handled * by ip6_mforward().