svn commit: r356268 - head/sys/net
Alexander V. Chernikov
melifaro at FreeBSD.org
Thu Jan 2 09:08:46 UTC 2020
Author: melifaro
Date: Thu Jan 2 09:08:45 2020
New Revision: 356268
URL: https://svnweb.freebsd.org/changeset/base/356268
Log:
Plug loopback idaddr refcount leak.
Reviewed by: markj
MFC after: 2 weeks
Differential Revision: https://reviews.freebsd.org/D22980
Modified:
head/sys/net/if.c
Modified: head/sys/net/if.c
==============================================================================
--- head/sys/net/if.c Thu Jan 2 06:56:28 2020 (r356267)
+++ head/sys/net/if.c Thu Jan 2 09:08:45 2020 (r356268)
@@ -1836,6 +1836,7 @@ ifa_maintain_loopback_route(int cmd, const char *otype
struct rt_addrinfo info;
struct sockaddr_dl null_sdl;
struct ifnet *ifp;
+ struct ifaddr *rti_ifa = NULL;
ifp = ifa->ifa_ifp;
@@ -1846,9 +1847,10 @@ ifa_maintain_loopback_route(int cmd, const char *otype
/* explicitly specify (loopback) ifa */
if (info.rti_ifp != NULL) {
NET_EPOCH_ENTER(et);
- info.rti_ifa = ifaof_ifpforaddr(ifa->ifa_addr, info.rti_ifp);
- if (info.rti_ifa != NULL)
- ifa_ref(info.rti_ifa);
+ rti_ifa = ifaof_ifpforaddr(ifa->ifa_addr, info.rti_ifp);
+ if (rti_ifa != NULL)
+ ifa_ref(rti_ifa);
+ info.rti_ifa = rti_ifa;
NET_EPOCH_EXIT(et);
}
}
@@ -1858,6 +1860,9 @@ ifa_maintain_loopback_route(int cmd, const char *otype
link_init_sdl(ifp, (struct sockaddr *)&null_sdl, ifp->if_type);
error = rtrequest1_fib(cmd, &info, NULL, ifp->if_fib);
+
+ if (rti_ifa != NULL)
+ ifa_free(rti_ifa);
if (error != 0 &&
!(cmd == RTM_ADD && error == EEXIST) &&
More information about the svn-src-all
mailing list