Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Jun 2018 11:39:27 +0000 (UTC)
From:      "Andrey V. Elsukov" <ae@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r335760 - in head/sys: net netinet netinet6
Message-ID:  <201806281139.w5SBdRfB048795@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ae
Date: Thu Jun 28 11:39:27 2018
New Revision: 335760
URL: https://svnweb.freebsd.org/changeset/base/335760

Log:
  Add NULL pointer check.
  
  encap_lookup_t method can be invoked by IP encap subsytem even if none
  of gif/gre/me interfaces are exist. Hash tables are allocated on demand,
  when first interface is created. So, make NULL pointer check before
  doing access to hash table.
  
  PR:		229378

Modified:
  head/sys/net/if_me.c
  head/sys/netinet/in_gif.c
  head/sys/netinet/ip_gre.c
  head/sys/netinet6/in6_gif.c
  head/sys/netinet6/ip6_gre.c

Modified: head/sys/net/if_me.c
==============================================================================
--- head/sys/net/if_me.c	Thu Jun 28 09:42:30 2018	(r335759)
+++ head/sys/net/if_me.c	Thu Jun 28 11:39:27 2018	(r335760)
@@ -312,6 +312,9 @@ me_lookup(const struct mbuf *m, int off, int proto, vo
 	const struct ip *ip;
 	struct me_softc *sc;
 
+	if (V_me_hashtbl == NULL)
+		return (0);
+
 	MPASS(in_epoch());
 	ip = mtod(m, const struct ip *);
 	CK_LIST_FOREACH(sc, &ME_HASH(ip->ip_dst.s_addr,

Modified: head/sys/netinet/in_gif.c
==============================================================================
--- head/sys/netinet/in_gif.c	Thu Jun 28 09:42:30 2018	(r335759)
+++ head/sys/netinet/in_gif.c	Thu Jun 28 11:39:27 2018	(r335760)
@@ -289,6 +289,9 @@ in_gif_lookup(const struct mbuf *m, int off, int proto
 	struct gif_softc *sc;
 	int ret;
 
+	if (V_ipv4_hashtbl == NULL)
+		return (0);
+
 	MPASS(in_epoch());
 	ip = mtod(m, const struct ip *);
 	/*

Modified: head/sys/netinet/ip_gre.c
==============================================================================
--- head/sys/netinet/ip_gre.c	Thu Jun 28 09:42:30 2018	(r335759)
+++ head/sys/netinet/ip_gre.c	Thu Jun 28 11:39:27 2018	(r335760)
@@ -115,6 +115,9 @@ in_gre_lookup(const struct mbuf *m, int off, int proto
 	const struct ip *ip;
 	struct gre_softc *sc;
 
+	if (V_ipv4_hashtbl == NULL)
+		return (0);
+
 	MPASS(in_epoch());
 	ip = mtod(m, const struct ip *);
 	CK_LIST_FOREACH(sc, &GRE_HASH(ip->ip_dst.s_addr,

Modified: head/sys/netinet6/in6_gif.c
==============================================================================
--- head/sys/netinet6/in6_gif.c	Thu Jun 28 09:42:30 2018	(r335759)
+++ head/sys/netinet6/in6_gif.c	Thu Jun 28 11:39:27 2018	(r335760)
@@ -309,6 +309,9 @@ in6_gif_lookup(const struct mbuf *m, int off, int prot
 	struct gif_softc *sc;
 	int ret;
 
+	if (V_ipv6_hashtbl == NULL)
+		return (0);
+
 	MPASS(in_epoch());
 	/*
 	 * NOTE: it is safe to iterate without any locking here, because softc

Modified: head/sys/netinet6/ip6_gre.c
==============================================================================
--- head/sys/netinet6/ip6_gre.c	Thu Jun 28 09:42:30 2018	(r335759)
+++ head/sys/netinet6/ip6_gre.c	Thu Jun 28 11:39:27 2018	(r335760)
@@ -107,6 +107,9 @@ in6_gre_lookup(const struct mbuf *m, int off, int prot
 	const struct ip6_hdr *ip6;
 	struct gre_softc *sc;
 
+	if (V_ipv6_hashtbl == NULL)
+		return (0);
+
 	MPASS(in_epoch());
 	ip6 = mtod(m, const struct ip6_hdr *);
 	CK_LIST_FOREACH(sc, &GRE_HASH(&ip6->ip6_dst, &ip6->ip6_src), chain) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201806281139.w5SBdRfB048795>