svn commit: r292163 - head/sys/net

Alexander V. Chernikov melifaro at FreeBSD.org
Sun Dec 13 16:37:03 UTC 2015


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,


More information about the svn-src-all mailing list