Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 14 Apr 2012 10:36:43 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
Subject:   svn commit: r234279 - stable/9/sys/netinet6
Message-ID:  <201204141036.q3EAah2x024743@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius
Date: Sat Apr 14 10:36:43 2012
New Revision: 234279
URL: http://svn.freebsd.org/changeset/base/234279

Log:
  Merge 233272:
    in6_pcblookup_local() still can return a pcb with NULL
    inp_socket. To avoid panic, do not dereference inp_socket,
    but obtain reuse port option from inp_flags2, like this
    is done after next call to in_pcblookup_local() a few lines
    down below.
  
    Submitted by: rwatson

Modified:
  stable/9/sys/netinet6/in6_pcb.c
Directory Properties:
  stable/9/sys/   (props changed)

Modified: stable/9/sys/netinet6/in6_pcb.c
==============================================================================
--- stable/9/sys/netinet6/in6_pcb.c	Sat Apr 14 10:20:34 2012	(r234278)
+++ stable/9/sys/netinet6/in6_pcb.c	Sat Apr 14 10:36:43 2012	(r234279)
@@ -245,8 +245,8 @@ in6_pcbbind(register struct inpcb *inp, 
 				if (tw == NULL ||
 				    (reuseport & tw->tw_so_options) == 0)
 					return (EADDRINUSE);
-			} else if (t && (reuseport & t->inp_socket->so_options)
-			    == 0) {
+			} else if (t && (reuseport == 0 ||
+			    (t->inp_flags2 & INP_REUSEPORT) == 0)) {
 				return (EADDRINUSE);
 			}
 #ifdef INET



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