Author: hselasky
Date: Tue May 12 11:52:34 2015
New Revision: 282817
URL: https://svnweb.freebsd.org/changeset/base/282817

Log:
  Apply proper locking when iterating the multicast addresses and add a
  missing check for NULL from a non-blocking "kzalloc()" function call.
  
  MFC after:    1 week
  Sponsored by: Mellanox Technologies
  Found by:     glebius @

Modified:
  head/sys/ofed/drivers/net/mlx4/en_netdev.c

Modified: head/sys/ofed/drivers/net/mlx4/en_netdev.c
==============================================================================
--- head/sys/ofed/drivers/net/mlx4/en_netdev.c  Tue May 12 10:03:14 2015        
(r282816)
+++ head/sys/ofed/drivers/net/mlx4/en_netdev.c  Tue May 12 11:52:34 2015        
(r282817)
@@ -650,6 +650,7 @@ static void mlx4_en_cache_mclist(struct 
        struct mlx4_en_mc_list *tmp;
        struct mlx4_en_priv *priv = netdev_priv(dev);
 
+        if_maddr_rlock(dev);
         TAILQ_FOREACH(ifma, &dev->if_multiaddrs, ifma_link) {
                 if (ifma->ifma_addr->sa_family != AF_LINK)
                         continue;
@@ -658,10 +659,13 @@ static void mlx4_en_cache_mclist(struct 
                         continue;
                 /* Make sure the list didn't grow. */
                tmp = kzalloc(sizeof(struct mlx4_en_mc_list), GFP_ATOMIC);
+               if (tmp == NULL)
+                       break;
                memcpy(tmp->addr,
                        LLADDR((struct sockaddr_dl *)ifma->ifma_addr), 
ETH_ALEN);
                list_add_tail(&tmp->list, &priv->mc_list);
         }
+        if_maddr_runlock(dev);
 }
 
 static void update_mclist_flags(struct mlx4_en_priv *priv,
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to