Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 4 Jan 2017 16:36:51 +0000 (UTC)
From:      Fabien Thomas <fabient@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r311289 - stable/11/usr.sbin/rtadvd
Message-ID:  <201701041636.v04GapgC080792@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: fabient
Date: Wed Jan  4 16:36:51 2017
New Revision: 311289
URL: https://svnweb.freebsd.org/changeset/base/311289

Log:
  MFC r308216:
  
  In rtadvd, interface lookup calls if_indextoname() many times in a loop,
  (it takes a long time on systems with many interfaces)
  without reason and without checking its return value.
  
  Sponsored by: Stormshield

Modified:
  stable/11/usr.sbin/rtadvd/if.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/usr.sbin/rtadvd/if.c
==============================================================================
--- stable/11/usr.sbin/rtadvd/if.c	Wed Jan  4 16:24:40 2017	(r311288)
+++ stable/11/usr.sbin/rtadvd/if.c	Wed Jan  4 16:36:51 2017	(r311289)
@@ -474,11 +474,18 @@ update_ifinfo(struct ifilist_head_t *ifi
 			    ifindex != ifm->ifm_index)
 				continue;
 
+			/* ifname */
+			if (if_indextoname(ifm->ifm_index, ifname) == NULL) {
+				syslog(LOG_WARNING,
+				    "<%s> ifname not found (idx=%d)",
+				    __func__, ifm->ifm_index);
+				continue;
+			}
+
 			/* lookup an entry with the same ifindex */
 			TAILQ_FOREACH(ifi, ifi_head, ifi_next) {
 				if (ifm->ifm_index == ifi->ifi_ifindex)
 					break;
-				if_indextoname(ifm->ifm_index, ifname);
 				if (strncmp(ifname, ifi->ifi_ifname,
 					sizeof(ifname)) == 0)
 					break;
@@ -497,15 +504,7 @@ update_ifinfo(struct ifilist_head_t *ifi
 			ifi->ifi_ifindex = ifm->ifm_index;
 
 			/* ifname */
-			if_indextoname(ifm->ifm_index, ifi->ifi_ifname);
-			if (ifi->ifi_ifname == NULL) {
-				syslog(LOG_WARNING,
-				    "<%s> ifname not found (idx=%d)",
-				    __func__, ifm->ifm_index);
-				if (ifi_new)
-					free(ifi);
-				continue;
-			}
+			strlcpy(ifi->ifi_ifname, ifname, IFNAMSIZ);
 
 			if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
 				syslog(LOG_ERR,



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