diff options
author | 2020-04-12 06:48:46 +0000 | |
---|---|---|
committer | 2020-04-12 06:48:46 +0000 | |
commit | 616e219ab9b70a6fe603962999ca6eb996f49eff (patch) | |
tree | e4a17c00fb03808a6f9916de320e5509d4f766fa | |
parent | DELETE payloads are common. Log with log_info instead of log_warnx. (diff) | |
download | wireguard-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.c | 6 |
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); |