summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvisa <visa@openbsd.org>2020-04-12 06:48:46 +0000
committervisa <visa@openbsd.org>2020-04-12 06:48:46 +0000
commit616e219ab9b70a6fe603962999ca6eb996f49eff (patch)
treee4a17c00fb03808a6f9916de320e5509d4f766fa
parentDELETE payloads are common. Log with log_info instead of log_warnx. (diff)
downloadwireguard-openbsd-616e219ab9b70a6fe603962999ca6eb996f49eff.tar.xz
wireguard-openbsd-616e219ab9b70a6fe603962999ca6eb996f49eff.zip
ifpromisc() requires NET_LOCK(), so acquire the lock when changing
promiscuous mode from bridge(4). This fixes a regression of r1.332 of sys/net/if_bridge.c. splassert with bridge(4) and vlan(4) reported by David Hill OK mpi@, dlg@
-rw-r--r--sys/net/if_bridge.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/net/if_bridge.c b/sys/net/if_bridge.c
index 2096af48b24..de8cdfe0d93 100644
--- a/sys/net/if_bridge.c
+++ b/sys/net/if_bridge.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_bridge.c,v 1.338 2019/11/06 03:51:26 dlg Exp $ */
+/* $OpenBSD: if_bridge.c,v 1.339 2020/04/12 06:48:46 visa Exp $ */
/*
* Copyright (c) 1999, 2000 Jason L. Wright (jason@thought.net)
@@ -313,7 +313,9 @@ bridge_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
break;
}
+ NET_LOCK();
error = ifpromisc(ifs, 1);
+ NET_UNLOCK();
if (error != 0) {
free(bif, M_DEVBUF, sizeof(*bif));
break;
@@ -558,7 +560,9 @@ bridge_ifremove(struct bridge_iflist *bif)
}
bif->ifp->if_bridgeidx = 0;
+ NET_LOCK();
error = ifpromisc(bif->ifp, 0);
+ NET_UNLOCK();
bridge_rtdelete(sc, bif->ifp, 0);
bridge_flushrule(bif);