svn commit: r311289 - stable/11/usr.sbin/rtadvd
Fabien Thomas
fabient at FreeBSD.org
Wed Jan 4 16:36:52 UTC 2017
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,
More information about the svn-src-stable-11
mailing list