Author: bz
Date: Sat Oct 30 11:54:55 2010
New Revision: 214552
URL: http://svn.freebsd.org/changeset/base/214552

Log:
  MFC r213930:
  
    Close a race acquiring the IF_ADDR_LOCK() for each entry while iterating
    over all interfaces to make sure the address will neither change nor be
    freed while we are working on it.
  
    PR:         kern/146250
    Submitted by:       Mikolaj Golub (to.my.trociny gmail.com)

Modified:
  stable/8/sys/net/rtsock.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)

Modified: stable/8/sys/net/rtsock.c
==============================================================================
--- stable/8/sys/net/rtsock.c   Sat Oct 30 11:30:49 2010        (r214551)
+++ stable/8/sys/net/rtsock.c   Sat Oct 30 11:54:55 2010        (r214552)
@@ -1473,6 +1473,7 @@ sysctl_iflist(int af, struct walkarg *w)
        TAILQ_FOREACH(ifp, &V_ifnet, if_link) {
                if (w->w_arg && w->w_arg != ifp->if_index)
                        continue;
+               IF_ADDR_LOCK(ifp);
                ifa = ifp->if_addr;
                info.rti_info[RTAX_IFP] = ifa->ifa_addr;
                len = rt_msg2(RTM_IFINFO, &info, NULL, w);
@@ -1530,10 +1531,13 @@ sysctl_iflist(int af, struct walkarg *w)
                                        goto done;
                        }
                }
+               IF_ADDR_UNLOCK(ifp);
                info.rti_info[RTAX_IFA] = info.rti_info[RTAX_NETMASK] =
                        info.rti_info[RTAX_BRD] = NULL;
        }
 done:
+       if (ifp != NULL)
+               IF_ADDR_UNLOCK(ifp);
        IFNET_RUNLOCK();
        return (error);
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to