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,
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to