svn commit: r309015 - stable/11/sys/net
Mark Johnston
markj at FreeBSD.org
Tue Nov 22 17:43:00 UTC 2016
Author: markj
Date: Tue Nov 22 17:42:59 2016
New Revision: 309015
URL: https://svnweb.freebsd.org/changeset/base/309015
Log:
MFC r308694:
Plug a lock leak in sysctl_ifmalist().
PR: 214542
Modified:
stable/11/sys/net/rtsock.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/net/rtsock.c
==============================================================================
--- stable/11/sys/net/rtsock.c Tue Nov 22 17:36:16 2016 (r309014)
+++ stable/11/sys/net/rtsock.c Tue Nov 22 17:42:59 2016 (r309015)
@@ -1768,13 +1768,15 @@ done:
static int
sysctl_ifmalist(int af, struct walkarg *w)
{
- struct ifnet *ifp;
- struct ifmultiaddr *ifma;
- struct rt_addrinfo info;
- int len, error = 0;
+ struct rt_addrinfo info;
struct ifaddr *ifa;
+ struct ifmultiaddr *ifma;
+ struct ifnet *ifp;
+ int error, len;
+ error = 0;
bzero((caddr_t)&info, sizeof(info));
+
IFNET_RLOCK_NOSLEEP();
TAILQ_FOREACH(ifp, &V_ifnet, if_link) {
if (w->w_arg && w->w_arg != ifp->if_index)
@@ -1794,7 +1796,7 @@ sysctl_ifmalist(int af, struct walkarg *
ifma->ifma_lladdr : NULL;
error = rtsock_msg_buffer(RTM_NEWMADDR, &info, w, &len);
if (error != 0)
- goto done;
+ break;
if (w->w_req && w->w_tmem) {
struct ifma_msghdr *ifmam;
@@ -1803,15 +1805,14 @@ sysctl_ifmalist(int af, struct walkarg *
ifmam->ifmam_flags = 0;
ifmam->ifmam_addrs = info.rti_addrs;
error = SYSCTL_OUT(w->w_req, w->w_tmem, len);
- if (error) {
- IF_ADDR_RUNLOCK(ifp);
- goto done;
- }
+ if (error != 0)
+ break;
}
}
IF_ADDR_RUNLOCK(ifp);
+ if (error != 0)
+ break;
}
-done:
IFNET_RUNLOCK_NOSLEEP();
return (error);
}
More information about the svn-src-all
mailing list