inet: in_{add,del}multi should only be called in netisr0
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Sun, 11 May 2014 07:14:29 +0000 (15:14 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Sun, 11 May 2014 11:30:40 +0000 (19:30 +0800)
Add KASSERT to make sure about it.

While I'm here, add blank line before in_addmulti()

sys/netinet/in.c

index 0eb61fe..5524238 100644 (file)
@@ -1328,6 +1328,7 @@ in_broadcast(struct in_addr in, struct ifnet *ifp)
        return (0);
 #undef ia
 }
+
 /*
  * Add an address to the list of IP multicast addresses for a given interface.
  */
@@ -1339,6 +1340,9 @@ in_addmulti(struct in_addr *ap, struct ifnet *ifp)
        struct sockaddr_in sin;
        struct ifmultiaddr *ifma;
 
+       KASSERT(&curthread->td_msgport == netisr_cpuport(0),
+           ("in_addmulti is not called in netisr0"));
+
        /*
         * Call generic routine to add membership or increment
         * refcount.  It wants addresses in the form of a sockaddr,
@@ -1390,6 +1394,9 @@ in_delmulti(struct in_multi *inm)
        struct ifmultiaddr *ifma;
        struct in_multi my_inm;
 
+       KASSERT(&curthread->td_msgport == netisr_cpuport(0),
+           ("in_delmulti is not called in netisr0"));
+
        crit_enter();
        ifma = inm->inm_ifma;
        my_inm.inm_ifp = NULL ; /* don't send the leave msg */