Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 13 Dec 2015 16:37:01 +0000 (UTC)
From:      "Alexander V. Chernikov" <melifaro@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r292163 - head/sys/net
Message-ID:  <201512131637.tBDGb1S4002313@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: melifaro
Date: Sun Dec 13 16:37:01 2015
New Revision: 292163
URL: https://svnweb.freebsd.org/changeset/base/292163

Log:
  Fix PINNED routes handling.
  Before r291643, adding new interface prefix had the following logic:
  try_add:
    EEXIST && (PINNED) {
      try_del(w/o PINNED flag)
      if (OK)
        try_add(PINNED)
  }
  
  In r291643, deletion was performed w/ PINNED flag held which leaded
    to new interface prefixes (like ::1) overriding older ones.
    Fix this by requesting deletion w/o RTF_PINNED.
  
  PR:		kern/205285
  Submitted by:	Fabian Keil <fk at fabiankeil.de>

Modified:
  head/sys/net/route.c

Modified: head/sys/net/route.c
==============================================================================
--- head/sys/net/route.c	Sun Dec 13 11:30:36 2015	(r292162)
+++ head/sys/net/route.c	Sun Dec 13 16:37:01 2015	(r292163)
@@ -1586,7 +1586,10 @@ rtrequest1_fib(int req, struct rt_addrin
 			 */
 			struct sockaddr *info_dst = info->rti_info[RTAX_DST];
 			info->rti_info[RTAX_DST] = ndst;
+			/* Do not delete existing PINNED(interface) routes */
+			info->rti_flags &= ~RTF_PINNED;
 			rt_old = rt_unlinkrte(rnh, info, &error);
+			info->rti_flags |= RTF_PINNED;
 			info->rti_info[RTAX_DST] = info_dst;
 			if (rt_old != NULL)
 				rn = rnh->rnh_addaddr(ndst, netmask, rnh,



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