freebsd-dev/sys/net
Kristof Provost 151abc80cd if_vlan: avoid hash table thrashing when adding and removing entries
vlan_remhash() uses incorrect value for b.

When using the default value for VLAN_DEF_HWIDTH (4), the VLAN hash-list table
expands from 16 chains to 32 chains as the 129th entry is added. trunk->hwidth
becomes 5. Say a few more entries are added and there are now 135 entries.
trunk-hwidth will still be 5. If an entry is removed, vlan_remhash() will
calculate a value of 32 for b. refcnt will be decremented to 134. The if
comparison at line 473 will return true and vlan_growhash() will be called. The
VLAN hash-list table will be compressed from 32 chains wide to 16 chains wide.
hwidth will become 4. This is an error, and it can be seen when a new VLAN is
added. The table will again be expanded. If an entry is then removed, again
the table is contracted.

If the number of VLANS stays in the range of 128-512, each time an insert
follows a remove, the table will expand. Each time a remove follows an
insert, the table will be contracted.

The fix is simple. The line 473 should test that the number of entries has
decreased such that the table should be contracted using what would be the new
value of hwidth. line 467 should be:

	b = 1 << (trunk->hwidth - 1);

PR:		265382
Reviewed by:	kp
MFC after:	2 weeks
Sponsored by:	NetApp, Inc.
2022-07-22 19:18:41 +02:00
..
altq altq: mark callouts as mpsafe 2021-09-04 17:26:10 +02:00
route ddb: use _FLAGS command macros where appropriate 2022-07-05 11:56:55 -03:00
bpf_buffer.c
bpf_buffer.h
bpf_filter.c
bpf_jitter.c
bpf_jitter.h
bpf_zerocopy.c
bpf_zerocopy.h
bpf.c bpf: Zero pad bytes preceding BPF headers 2022-06-20 12:48:13 -04:00
bpf.h bpf: Correct a comment 2022-06-20 12:48:13 -04:00
bpfdesc.h bpf: Add an ioctl to set the VLAN Priority on packets sent by bpf 2021-07-26 23:13:31 +02:00
bridgestp.c bridgestp: validate timer values in config BPDU 2021-04-19 12:09:18 +02:00
bridgestp.h
debugnet_inet.c debugnet: Fix false-positive assertions for dp_state 2021-07-28 16:34:14 -07:00
debugnet_int.h
debugnet.c debugnet: Fix an error handling bug in the DDB command tokenizer 2022-06-16 10:05:10 -04:00
debugnet.h
dlt.h net(4): Fix a typo in a source code comment 2022-04-02 14:57:06 +02:00
ethernet.h net(3): Fix a typo in a source code comment 2022-04-02 10:53:40 +02:00
firewire.h
ieee8023ad_lacp.c lacp: Remove racy kassert 2022-06-13 11:32:10 -04:00
ieee8023ad_lacp.h lacp: short timeout erroneously declares link-flapping 2022-04-27 12:41:30 -07:00
ieee_oui.h Remove "All Rights Reserved" from FreeBSD Foundation sys/ copyrights 2021-08-08 10:42:24 -04:00
if_arp.h
if_bridge.c if_bridge: change MTU for new members 2022-06-27 08:27:27 +02:00
if_bridgevar.h net: make if_bridgevar.h self-contained 2021-12-17 12:38:35 +01:00
if_clone.c if_clone: correctly destroy a clone from a different vnet 2022-01-24 21:07:16 -08:00
if_clone.h if_clone: Fix a typo in a source code comment 2022-07-03 15:13:32 +02:00
if_dead.c Add a switch structure for send tags. 2021-09-14 11:43:41 -07:00
if_disc.c routing: Allow using IPv6 next-hops for IPv4 routes (RFC 5549). 2021-08-22 22:56:08 +00:00
if_dl.h
if_edsc.c
if_enc.c
if_enc.h
if_epair.c epair: unbind prior to returning to userspace 2022-05-07 18:17:33 +02:00
if_ethersubr.c ether_resolve_addr: eh is only used for INET or INET6. 2022-04-13 16:08:21 -07:00
if_fwsubr.c routing: Allow using IPv6 next-hops for IPv4 routes (RFC 5549). 2021-08-22 22:56:08 +00:00
if_gif.c if_gif: fix vnet shutdown panic 2021-11-08 12:00:00 +01:00
if_gif.h
if_gre.c routing: Allow using IPv6 next-hops for IPv4 routes (RFC 5549). 2021-08-22 22:56:08 +00:00
if_gre.h
if_infiniband.c infiniband_resolve_addr: ih is only used for INET or INET6. 2022-04-13 16:08:21 -07:00
if_ipsec.c Use network epoch to protect local IPv4 addresses hash. 2021-10-22 14:40:53 -07:00
if_ipsec.h
if_lagg.c Fix unused variable warning in if_lagg.c 2022-07-21 21:05:51 +02:00
if_lagg.h
if_llatbl.c if_llatbl: Fix a typo in a debug statement 2022-06-04 15:22:09 +02:00
if_llatbl.h netinet6: Fix mbuf leak in NDP 2022-05-31 21:06:14 +00:00
if_llc.h
if_loop.c routing: Allow using IPv6 next-hops for IPv4 routes (RFC 5549). 2021-08-22 22:56:08 +00:00
if_me.c Use network epoch to protect local IPv4 addresses hash. 2021-10-22 14:40:53 -07:00
if_media.c
if_media.h
if_mib.c ifnet: make V_if_index static to if.c 2021-12-06 09:32:31 -08:00
if_mib.h
if_ovpn.c if_ovpn: fix mbuf leak 2022-07-12 14:19:25 +02:00
if_ovpn.h ovpn: Introduce OpenVPN DCO support 2022-06-28 11:33:10 +02:00
if_pflog.h pflog: align header to 4 bytes, not 8 2022-02-01 18:17:44 +01:00
if_pfsync.h pf: make if_pfsync.h self-contained 2021-12-17 12:38:35 +01:00
if_stf.c if_stf: KASAN fix 2021-11-30 17:35:15 +01:00
if_stf.h if_stf: make if_stf.h self-contained 2021-12-17 12:38:34 +01:00
if_tap.h
if_tun.h
if_tuntap.c routing: Allow using IPv6 next-hops for IPv4 routes (RFC 5549). 2021-08-22 22:56:08 +00:00
if_types.h net(3): Fix a typo in a source code comment 2022-04-02 09:41:10 +02:00
if_var.h struct ifnet: add if_capabilities2 and if_capenable2 bitmasks 2022-05-24 23:59:32 +03:00
if_vlan_var.h vlan: deduplicate bpf_setpcp() and pf_ieee8021q_setpcp() 2021-07-26 23:13:31 +02:00
if_vlan.c if_vlan: avoid hash table thrashing when adding and removing entries 2022-07-22 19:18:41 +02:00
if_vxlan.c vxlan: Add support for socket ioctls SIOC[SG]TUNFIB 2022-07-08 18:14:19 +00:00
if_vxlan.h
if.c netinet6: fix ndp proxying 2022-05-30 10:53:33 +00:00
if.h arp: Implement sticky ARP mode for interfaces. 2022-05-27 12:41:30 +00:00
ifdi_if.m
iflib_clone.c Create wrapper for Giant taken for newbus 2021-12-09 17:04:45 -07:00
iflib_private.h
iflib.c Fix unused variable warning in iflib.c 2022-07-21 21:19:39 +02:00
iflib.h iflib: Allow drivers to determine which queue to TX on 2022-01-24 18:22:02 -08:00
ifq.h
infiniband.h
mp_ring.c
mp_ring.h
mppc.h
mppcc.c
mppcd.c
netisr_internal.h
netisr.c netisr: serialize/restore m_pkthdr.rcvif when queueing mbufs 2022-05-05 14:38:07 -04:00
netisr.h
netmap_legacy.h
netmap_user.h netmap: fix refcount bug in netmap allocator 2022-03-06 16:39:16 +00:00
netmap_virt.h
netmap.h
paravirt.h
pfil.c net: whack "set but not used" warnings in net/pfil.c 2021-11-14 17:19:58 +00:00
pfil.h
pfkeyv2.h
pfvar.h pf: support matching on tags for Ethernet rules 2022-06-20 10:16:20 +02:00
ppp_defs.h
radix.c routing: Fix crashes with dpdk_lpm[46] algo. 2021-08-17 20:46:22 +00:00
radix.h routing: Fix crashes with dpdk_lpm[46] algo. 2021-08-17 20:46:22 +00:00
raw_cb.c
raw_cb.h protocols: init with standard SYSINIT(9) or VNET_SYSINIT 2022-01-03 10:15:21 -08:00
raw_usrreq.c protocols: init with standard SYSINIT(9) or VNET_SYSINIT 2022-01-03 10:15:21 -08:00
rndis.h
route.c routing: fix source address selection rules for IPv4 over IPv6. 2021-09-07 21:41:05 +00:00
route.h net(3): Fix a typo in a source code comment 2022-04-02 09:24:48 +02:00
rss_config.c Revert "wpa: Import wpa_supplicant/hostapd commit 14ab4a816" 2021-12-02 14:45:04 -08:00
rss_config.h
rtsock.c routing: fix debug headers added in 6fa8ed43ee #2. 2022-06-26 07:28:15 +00:00
sff8436.h
sff8472.h
slcompress.c
slcompress.h
toeplitz.c
toeplitz.h
vnet.c ddb: annotate some commands with DB_CMD_MEMSAFE 2022-07-18 22:06:09 +00:00
vnet.h IPv4: experimental changes to allow net 0/8, 240/4, part of 127/8 2022-07-13 09:46:05 -05:00