Module Name:    src
Committed By:   ozaki-r
Date:           Wed May  8 09:53:43 UTC 2019

Modified Files:
        src/sys/arch/arm/sunxi: sun4i_emac.c

Log Message:
Protect ether_multi list

PR 54153


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/sunxi/sun4i_emac.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/sunxi/sun4i_emac.c
diff -u src/sys/arch/arm/sunxi/sun4i_emac.c:1.7 src/sys/arch/arm/sunxi/sun4i_emac.c:1.8
--- src/sys/arch/arm/sunxi/sun4i_emac.c:1.7	Mon Apr 22 07:51:16 2019
+++ src/sys/arch/arm/sunxi/sun4i_emac.c	Wed May  8 09:53:43 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: sun4i_emac.c,v 1.7 2019/04/22 07:51:16 msaitoh Exp $ */
+/* $NetBSD: sun4i_emac.c,v 1.8 2019/05/08 09:53:43 ozaki-r Exp $ */
 
 /*-
  * Copyright (c) 2013-2017 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: sun4i_emac.c,v 1.7 2019/04/22 07:51:16 msaitoh Exp $");
+__KERNEL_RCSID(1, "$NetBSD: sun4i_emac.c,v 1.8 2019/05/08 09:53:43 ozaki-r Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -864,9 +864,11 @@ sun4i_emac_rx_hash(struct sun4i_emac_sof
 	if ((ifp->if_flags & IFF_PROMISC) == 0) {
 		hash[0] = hash[1] = 0;
 
+		ETHER_LOCK(&sc->sc_ec);
 		ETHER_FIRST_MULTI(step, &sc->sc_ec, enm);
 		while (enm != NULL) {
 			if (memcmp(enm->enm_addrlo, enm->enm_addrhi, ETHER_ADDR_LEN)) {
+				ETHER_UNLOCK(&sc->sc_ec);
 				/*
 				 * We must listen to a range of multicast addresses.
 				 * For now, just accept all multicasts, rather than
@@ -889,6 +891,7 @@ sun4i_emac_rx_hash(struct sun4i_emac_sof
 			hash[crc >> 5] |= __BIT(crc & 31);
                 	ETHER_NEXT_MULTI(step, enm);
 		}
+		ETHER_UNLOCK(&sc->sc_ec);
 		ifp->if_flags &= ~IFF_ALLMULTI;
 		rxctl |= EMAC_RX_CTL_MHF;
 	}

Reply via email to