freebsd-skq/sys/net
Kristof Provost 581e697036 Fix panic when adding vtnet interfaces to a bridge
vtnet interfaces are always in promiscuous mode (at least if the
VIRTIO_NET_F_CTRL_RX feature is not negotiated with the host).  if_promisc() on
a vtnet interface returned ENOTSUP although it has IFF_PROMISC set. This
confused the bridge code. Instead we now accept all enable/disable promiscuous
commands (and always keep IFF_PROMISC set).

There are also two issues with the if_bridge error handling.

If if_promisc() fails it uses bridge_delete_member() to clean up. This tries to
disable promiscuous mode on the interface. That runs into an assert, because
promiscuous mode was never set in the first place. (That's the panic reported in
PR 200210.)
We can only unset promiscuous mode if the interface actually is promiscuous.
This goes against the reference counting done by if_promisc(), but only the
first/last if_promic() calls can actually fail, so this is safe.

A second issue is a double free of bif. It's already freed by
bridge_delete_member().

PR:		200210
Differential Revision:	https://reviews.freebsd.org/D2804
Reviewed by:	philip (mentor)
2015-06-13 19:39:21 +00:00
..
altq - Format copyright notices, VCS ids. 2015-04-17 06:38:31 +00:00
bpf_buffer.c
bpf_buffer.h
bpf_filter.c
bpf_jitter.c
bpf_jitter.h
bpf_zerocopy.c
bpf_zerocopy.h
bpf.c Move the definition of struct bpf_if to bpf.c. 2015-04-20 22:08:11 +00:00
bpf.h Move the definition of struct bpf_if to bpf.c. 2015-04-20 22:08:11 +00:00
bpfdesc.h
bridgestp.c
bridgestp.h
ethernet.h
fddi.h
firewire.h
flowtable.c Start process of removing the use of the deprecated "M_FLOWID" flag 2014-12-01 11:45:24 +00:00
flowtable.h
ieee8023ad_lacp.c ifmedia changes: 2015-04-07 21:31:17 +00:00
ieee8023ad_lacp.h
ieee_oui.h
if_arc.h
if_arcsubr.c Fix typo. 2015-01-09 20:29:13 +00:00
if_arp.h
if_atm.h
if_atmsubr.c
if_bridge.c Fix panic when adding vtnet interfaces to a bridge 2015-06-13 19:39:21 +00:00
if_bridgevar.h
if_clone.c Fix group membership of cloned interfaces when one is moved by 2015-03-02 20:00:03 +00:00
if_clone.h Fix group membership of cloned interfaces when one is moved by 2015-03-02 20:00:03 +00:00
if_dead.c Provide a dead version of if_get_counter. 2014-12-12 16:10:42 +00:00
if_debug.c
if_disc.c
if_dl.h
if_edsc.c
if_enc.c
if_enc.h
if_epair.c
if_ethersubr.c Refactor / restructure the RSS code into generic, IPv4 and IPv6 specific 2015-01-18 18:06:40 +00:00
if_fddisubr.c After r275196 unbreak NOIP and NOINET kernels by hiding an otherwise 2014-11-28 14:51:49 +00:00
if_fwsubr.c After r275196 unbreak NOIP and NOINET kernels by hiding an otherwise 2014-11-28 14:51:49 +00:00
if_gif.c Add new socket ioctls SIOC[SG]TUNFIB to set FIB number of encapsulated 2015-05-12 07:37:27 +00:00
if_gif.h Add an ability accept encapsulated packets from different sources by one 2015-05-15 12:19:45 +00:00
if_gre.c Add new socket ioctls SIOC[SG]TUNFIB to set FIB number of encapsulated 2015-05-12 07:37:27 +00:00
if_gre.h Extern declarations in C files loses compile-time checking that 2014-12-25 21:32:37 +00:00
if_iso88025subr.c Do not return unlocked/unreferenced lle in arpresolve/nd6_storelladdr - 2014-11-27 23:06:25 +00:00
if_lagg.c Fix a possible mbuf leak on interface departure. 2015-03-26 23:40:22 +00:00
if_lagg.h Factor out mbuf hashing code from LAGG driver so that other network 2015-03-11 16:02:24 +00:00
if_llatbl.c
if_llatbl.h
if_llc.h
if_loop.c
if_me.c Add new socket ioctls SIOC[SG]TUNFIB to set FIB number of encapsulated 2015-05-12 07:37:27 +00:00
if_media.c Make IFMEDIA_DEBUG a kernel option. 2015-04-21 10:35:23 +00:00
if_media.h ifmedia changes: 2015-04-07 21:31:17 +00:00
if_mib.c
if_mib.h
if_pflog.h
if_pfsync.h
if_sppp.h
if_spppfr.c
if_spppsubr.c CALLOUT_MPSAFE has lost its meaning since r141428, i.e., for more than ten 2015-05-22 17:05:21 +00:00
if_stf.c Remove if_stf.h. It contains only one function declaration used by if_stf(4). 2014-12-23 20:54:59 +00:00
if_tap.c Redo r274966. Instead of global all-interface all-vnet undocumented sysctl, 2015-04-10 09:50:13 +00:00
if_tap.h
if_tapvar.h
if_tun.c
if_tun.h
if_types.h After r281643 an #ifdef IFT_FOO preprocessor directive returns false, 2015-05-02 20:37:40 +00:00
if_var.h Move ALTQ from contrib to net/altq. The ALTQ code is for many years 2015-04-16 20:22:40 +00:00
if_vlan_var.h
if_vlan.c Don't propagate SIOCSIFCAPS from a vlan(4) to its parent. This leads to 2015-04-23 13:19:00 +00:00
if_vxlan.c Start process of removing the use of the deprecated "M_FLOWID" flag 2014-12-01 11:45:24 +00:00
if_vxlan.h
if.c ifmedia changes: 2015-04-07 21:31:17 +00:00
if.h
ifq.h Move ALTQ from contrib to net/altq. The ALTQ code is for many years 2015-04-16 20:22:40 +00:00
iso88025.h
netisr_internal.h
netisr.c Currently there is no easy way to specify net.isr.maxthreads = all cpus. We need 2015-04-25 16:12:06 +00:00
netisr.h
netmap_user.h
netmap.h
paravirt.h
pfil.c
pfil.h
pfkeyv2.h
pfvar.h Minor change to the macros to make sure that if an AF is passed that is neither AF_INET6 nor AF_INET that we don't touch random bits of memory. 2015-04-15 14:46:45 +00:00
ppp_defs.h
radix_mpath.c
radix_mpath.h
radix.c
radix.h
raw_cb.c
raw_cb.h
raw_usrreq.c
route.c Remove duplicate header entry. 2015-04-16 02:44:37 +00:00
route.h
rss_config.c Refactor / restructure the RSS code into generic, IPv4 and IPv6 specific 2015-01-18 18:06:40 +00:00
rss_config.h Refactor / restructure the RSS code into generic, IPv4 and IPv6 specific 2015-01-18 18:06:40 +00:00
rtsock.c
sff8436.h * Update SFF-8024 Identifier constants. 2015-05-16 13:11:35 +00:00
sff8472.h * Update SFF-8024 Identifier constants. 2015-05-16 13:11:35 +00:00
slcompress.c
slcompress.h
toeplitz.c Refactor / restructure the RSS code into generic, IPv4 and IPv6 specific 2015-01-18 18:06:40 +00:00
toeplitz.h Refactor / restructure the RSS code into generic, IPv4 and IPv6 specific 2015-01-18 18:06:40 +00:00
vnet.c
vnet.h