opnsense-src/sys/net
Kristof Provost f18598a43e bridge: Fix fragment handling and memory leak
Fragmented UDP and ICMP packets were corrupted if a firewall with reassembling
feature (like pf'scrub) is enabled on the bridge.  This patch fixes corrupted
packet problem and the panic (triggered easly with low RAM) as explain in PR
185633.

bridge_pfil and bridge_fragment relationship:

bridge_pfil() receive (IN direction) packets and sent it to the firewall The
firewall can be configured for reassembling fragmented packet (like pf'scrubing)
in one mbuf chain when bridge_pfil() need to send this reassembled packet to the
outgoing interface, it needs to re-fragment it by using bridge_fragment()
bridge_fragment() had to split this mbuf (using ip_fragment) first then
had to M_PREPEND each packet in the mbuf chain for adding Ethernet
header.

But M_PREPEND can sometime create a new mbuf on the begining of the mbuf chain,
then the "main" pointer of this mbuf chain should be updated and this case is
tottaly forgotten. The original bridge_fragment code (Revision 158140,
2006 April 29) came from OpenBSD, and the call to bridge_enqueue was
embedded.  But on FreeBSD, bridge_enqueue() is done after bridge_fragment(),
then the original OpenBSD code can't work as-it of FreeBSD.

PR:		185633
Submitted by:	Olivier Cochard-Labbé
Differential Revision:	https://reviews.freebsd.org/D7780
2016-09-24 07:09:43 +00:00
..
altq Hide the boottime and bootimebin globals, provide the getboottime(9) 2016-07-27 11:08:59 +00:00
bpf.c Hide the boottime and bootimebin globals, provide the getboottime(9) 2016-07-27 11:08:59 +00:00
bpf.h sys/net*: minor spelling fixes. 2016-05-03 18:05:43 +00:00
bpf_buffer.c Remove the sleep from the buffer allocation routine. 2015-07-31 20:25:54 +00:00
bpf_buffer.h
bpf_filter.c sys/net* : for pointers replace 0 with NULL. 2016-04-15 17:30:33 +00:00
bpf_jitter.c
bpf_jitter.h
bpf_zerocopy.c - Modify vm_page_unwire() and vm_page_enqueue() to directly accept 2014-06-16 18:15:27 +00:00
bpf_zerocopy.h
bpfdesc.h
bridgestp.c sys/net*: minor spelling fixes. 2016-05-03 18:05:43 +00:00
bridgestp.h
ethernet.h net/vlan: Shift for pri is 13 (pri mask 0xe000) not 1. 2016-09-01 06:32:35 +00:00
fddi.h
firewire.h
flowtable.c Add variable declaration missing in r302372. 2016-07-06 17:46:49 +00:00
flowtable.h Add my copyright to flowtable. 2014-02-17 12:07:17 +00:00
ieee8023ad_lacp.c Add sysctl to control LACP strict compliance default 2015-11-06 15:33:27 +00:00
ieee8023ad_lacp.h Make LAG LACP fast timeout tunable through IOCTL. 2015-08-12 20:21:04 +00:00
ieee_oui.h Bump bhyve allocation up to 20 bits to avoid 2014-05-20 02:59:13 +00:00
if.c Partially revert r257696/r257713, which have an issue with writing to user 2016-07-24 10:10:09 +00:00
if.h Add support to priority code point (PCP) that is an 3-bit field 2016-06-06 09:51:58 +00:00
if_arc.h Replace 'struct route *' if_output() argument with 'struct nhop_info *'. 2014-11-09 16:33:04 +00:00
if_arcsubr.c Remove the 4.3BSD compatible macro m_copy(), use m_copym() instead. 2016-09-15 07:41:48 +00:00
if_arp.h Remove struct arpcom. It is unused by most interface types, that allocate 2014-11-07 15:14:10 +00:00
if_atm.h sys/net*: minor spelling fixes. 2016-05-03 18:05:43 +00:00
if_atmsubr.c sys/net* : for pointers replace 0 with NULL. 2016-04-15 17:30:33 +00:00
if_bridge.c bridge: Fix fragment handling and memory leak 2016-09-24 07:09:43 +00:00
if_bridgevar.h
if_clone.c sys/net*: minor spelling fixes. 2016-05-03 18:05:43 +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 Add more fields to if_debug.c for ddb(4) 'show ifnet'; resort 2016-06-22 12:53:10 +00:00
if_disc.c Get closer to a VIMAGE network stack teardown from top to bottom rather 2016-06-21 13:48:49 +00:00
if_dl.h Constantify lookup key in ifa_ifwith* functions. 2015-09-05 05:33:20 +00:00
if_edsc.c Get closer to a VIMAGE network stack teardown from top to bottom rather 2016-06-21 13:48:49 +00:00
if_enc.c Get closer to a VIMAGE network stack teardown from top to bottom rather 2016-06-21 13:48:49 +00:00
if_enc.h Overhaul if_enc(4) and make it loadable in run-time. 2015-11-25 07:31:59 +00:00
if_epair.c Teach netisr_get_cpuid() to limit a given value to supported by netisr. 2016-08-17 20:21:33 +00:00
if_ethersubr.c Extract out the various local definitions of ETHER_IS_BROADCAST() and 2016-08-07 03:48:33 +00:00
if_fddisubr.c Remove the 4.3BSD compatible macro m_copy(), use m_copym() instead. 2016-09-15 07:41:48 +00:00
if_fwsubr.c This change re-adds L2 caching for TCP and UDP, as originally added in D4306 2016-06-02 17:51:29 +00:00
if_gif.c Extract out the various local definitions of ETHER_IS_BROADCAST() and 2016-08-07 03:48:33 +00:00
if_gif.h - Remove GIF_{SEND,ACCEPT}_REVETHIP. 2015-09-10 05:59:39 +00:00
if_gre.c Cleanup unnecessary semicolons from the kernel. 2016-04-10 23:07:00 +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 Remove the 4.3BSD compatible macro m_copy(), use m_copym() instead. 2016-09-15 07:41:48 +00:00
if_lagg.c Get closer to a VIMAGE network stack teardown from top to bottom rather 2016-06-21 13:48:49 +00:00
if_lagg.h Revert accidental submit of WIP as part of r297609 2016-04-06 04:58:20 +00:00
if_llatbl.c sys/net*: minor spelling fixes. 2016-05-03 18:05:43 +00:00
if_llatbl.h This change re-adds L2 caching for TCP and UDP, as originally added in D4306 2016-06-02 17:51:29 +00:00
if_llc.h
if_loop.c Get closer to a VIMAGE network stack teardown from top to bottom rather 2016-06-21 13:48:49 +00:00
if_me.c Add IFCAP_LINKSTATE support. 2015-10-03 09:15:23 +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 These files were getting sys/malloc.h and vm/uma.h with header pollution 2016-02-01 17:41:21 +00:00
if_mib.h
if_pflog.h
if_pfsync.h Remove more constants related to static sysctl nodes. The MAXID constants 2014-02-25 18:44:33 +00:00
if_sppp.h sys/net*: minor spelling fixes. 2016-05-03 18:05:43 +00:00
if_spppfr.c Mechanically convert to if_inc_counter(). 2014-09-19 10:39:58 +00:00
if_spppsubr.c sys/net*: minor spelling fixes. 2016-05-03 18:05:43 +00:00
if_stf.c Convert if_stf(4) to new routing api. 2015-12-16 09:18:20 +00:00
if_tap.c if_tap: correct typo in sysctl description (Enably) 2015-10-21 19:56:16 +00:00
if_tap.h
if_tapvar.h
if_tun.c Allow writing IP packets of length TUNMRU no matter if TUNSIFHEAD is set 2016-05-19 13:52:12 +00:00
if_tun.h Allow an MTU of 65535 bytes to be set via TUN[SG]IFINFO. This requires 2016-05-24 11:47:14 +00:00
if_types.h After r281643 an #ifdef IFT_FOO preprocessor directive returns false, 2015-05-02 20:37:40 +00:00
if_var.h Add spares to struct ifnet and socket for packet pacing and/or general 2016-06-23 21:07:15 +00:00
if_vlan.c Get closer to a VIMAGE network stack teardown from top to bottom rather 2016-06-21 13:48:49 +00:00
if_vlan_var.h Add support to priority code point (PCP) that is an 3-bit field 2016-06-06 09:51:58 +00:00
if_vxlan.c net: Use M_HASHTYPE_OPAQUE_HASH if the mbuf flowid has hash properties 2016-06-07 04:51:50 +00:00
if_vxlan.h Add vxlan interface 2014-10-20 14:42:42 +00:00
ifdi_if.m Update iflib to support more NIC designs 2016-08-12 21:29:44 +00:00
iflib.c Update iflib to support more NIC designs 2016-08-12 21:29:44 +00:00
iflib.h Update iflib to support more NIC designs 2016-08-12 21:29:44 +00:00
ifq.h buf_ring/drbr: Add buf_ring_peek_clear_sc and use it in drbr_peek 2016-02-29 03:54:51 +00:00
iso88025.h Replace 'struct route *' if_output() argument with 'struct nhop_info *'. 2014-11-09 16:33:04 +00:00
mp_ring.c sys/net: more spelling. 2016-05-19 16:28:05 +00:00
mp_ring.h Import the 'iflib' API library for network drivers. From the author: 2016-05-18 04:35:58 +00:00
mppc.h ng_mppc(4): Bring netgraph(3) MPPC compression support. 2016-06-07 15:07:00 +00:00
mppcc.c ng_mppc(4):: basic readability cleanups. 2016-07-09 02:33:45 +00:00
mppcd.c ng_mppc(4):: basic readability cleanups. 2016-07-09 02:33:45 +00:00
netisr.c Teach netisr_get_cpuid() to limit a given value to supported by netisr. 2016-08-17 20:21:33 +00:00
netisr.h Introduce a per-VNET flag to enable/disable netisr prcessing on that VNET. 2016-06-03 13:57:10 +00:00
netisr_internal.h
netmap.h Sync netmap sources with the version in our private tree. 2015-07-10 05:51:36 +00:00
netmap_user.h Sync netmap sources with the version in our private tree. 2015-07-10 05:51:36 +00:00
paravirt.h Update to the current version of netmap. 2014-08-16 15:00:01 +00:00
pfil.c Get closer to a VIMAGE network stack teardown from top to bottom rather 2016-06-21 13:48:49 +00:00
pfil.h Whitespace, style cleanups, and improved comments. 2013-08-24 12:03:24 +00:00
pfkeyv2.h Implement the sadb_x_policy_priority field as it is done in Linux: 2015-11-17 14:39:33 +00:00
pfvar.h Update pf(4) and pflog(4) to survive basic VNET testing, which includes 2016-06-23 21:34:38 +00:00
ppp_defs.h
radix.c radix rn_inithead: Fix minor leak in low memory conditions 2016-04-20 02:01:45 +00:00
radix.h MFP r287070,r287073: split radix implementation and route table structure. 2016-01-25 06:33:15 +00:00
radix_mpath.c radix_mpath: Don't derefence a NULL pointer in for loop iteration 2016-04-26 20:27:17 +00:00
radix_mpath.h MFP r287070,r287073: split radix implementation and route table structure. 2016-01-25 06:33:15 +00:00
raw_cb.c vnet.h needs to be included before raw_cb.h. Now it compiles due to 2013-10-25 19:49:03 +00:00
raw_cb.h
raw_usrreq.c Remove the 4.3BSD compatible macro m_copy(), use m_copym() instead. 2016-09-15 07:41:48 +00:00
rndis.h hyperv/hn: Stringent RNDIS packet message length/offset check. 2016-09-06 03:20:06 +00:00
route.c Get closer to a VIMAGE network stack teardown from top to bottom rather 2016-06-21 13:48:49 +00:00
route.h rtentry: Initialize rt_mtx with MTX_NEW 2016-08-01 23:07:31 +00:00
route_var.h FreeBSD previously provided route caching for TCP (and UDP). Re-add 2016-03-24 07:54:56 +00:00
rss_config.c sys/net*: minor spelling fixes. 2016-05-03 18:05:43 +00:00
rss_config.h Replace the printf()s with optional rate limited debugging for RSS. 2015-08-28 05:58:16 +00:00
rtsock.c Introduce a per-VNET flag to enable/disable netisr prcessing on that VNET. 2016-06-03 13:57:10 +00:00
sff8436.h Add SFF-8024 Extended Specification Compliance 2015-12-28 09:26:07 +00:00
sff8472.h sys/net*: minor spelling fixes. 2016-05-03 18:05:43 +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 Get closer to a VIMAGE network stack teardown from top to bottom rather 2016-06-21 13:48:49 +00:00
vnet.h Get closer to a VIMAGE network stack teardown from top to bottom rather 2016-06-21 13:48:49 +00:00