Revision b210de4f8c97d57de051e805686248ec4c6cfc52 authored by Aya Levin on 07 January 2021, 13:50:18 UTC, committed by Jakub Kicinski on 09 January 2021, 22:06:32 UTC
There are cases where GSO segment's length exceeds the egress MTU:
 - Forwarding of a TCP GRO skb, when DF flag is not set.
 - Forwarding of an skb that arrived on a virtualisation interface
   (virtio-net/vhost/tap) with TSO/GSO size set by other network
   stack.
 - Local GSO skb transmitted on an NETIF_F_TSO tunnel stacked over an
   interface with a smaller MTU.
 - Arriving GRO skb (or GSO skb in a virtualised environment) that is
   bridged to a NETIF_F_TSO tunnel stacked over an interface with an
   insufficient MTU.

If so:
 - Consume the SKB and its segments.
 - Issue an ICMP packet with 'Packet Too Big' message containing the
   MTU, allowing the source host to reduce its Path MTU appropriately.

Note: These cases are handled in the same manner in IPv4 output finish.
This patch aligns the behavior of IPv6 and the one of IPv4.

Fixes: 9e50849054a4 ("netfilter: ipv6: move POSTROUTING invocation before fragmentation")
Signed-off-by: Aya Levin <ayal@nvidia.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Link: https://lore.kernel.org/r/1610027418-30438-1-git-send-email-ayal@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent a2bc221
History
File Mode Size
Kconfig -rw-r--r-- 30.0 KB
Makefile -rw-r--r-- 3.3 KB
blktrace.c -rw-r--r-- 45.9 KB
bpf_trace.c -rw-r--r-- 58.9 KB
bpf_trace.h -rw-r--r-- 633 bytes
fgraph.c -rw-r--r-- 16.8 KB
ftrace.c -rw-r--r-- 179.0 KB
ftrace_internal.h -rw-r--r-- 1.5 KB
kprobe_event_gen_test.c -rw-r--r-- 5.6 KB
power-traces.c -rw-r--r-- 505 bytes
preemptirq_delay_test.c -rw-r--r-- 4.2 KB
ring_buffer.c -rw-r--r-- 156.4 KB
ring_buffer_benchmark.c -rw-r--r-- 10.8 KB
rpm-traces.c -rw-r--r-- 510 bytes
synth_event_gen_test.c -rw-r--r-- 13.7 KB
trace.c -rw-r--r-- 234.5 KB
trace.h -rw-r--r-- 62.0 KB
trace_benchmark.c -rw-r--r-- 5.2 KB
trace_benchmark.h -rw-r--r-- 871 bytes
trace_boot.c -rw-r--r-- 8.4 KB
trace_branch.c -rw-r--r-- 10.1 KB
trace_clock.c -rw-r--r-- 3.6 KB
trace_dynevent.c -rw-r--r-- 11.9 KB
trace_dynevent.h -rw-r--r-- 4.6 KB
trace_entries.h -rw-r--r-- 8.2 KB
trace_event_perf.c -rw-r--r-- 12.2 KB
trace_events.c -rw-r--r-- 86.9 KB
trace_events_filter.c -rw-r--r-- 55.4 KB
trace_events_filter_test.h -rw-r--r-- 1.1 KB
trace_events_hist.c -rw-r--r-- 141.7 KB
trace_events_inject.c -rw-r--r-- 6.4 KB
trace_events_synth.c -rw-r--r-- 50.1 KB
trace_events_trigger.c -rw-r--r-- 41.0 KB
trace_export.c -rw-r--r-- 5.2 KB
trace_functions.c -rw-r--r-- 18.1 KB
trace_functions_graph.c -rw-r--r-- 32.5 KB
trace_hwlat.c -rw-r--r-- 16.8 KB
trace_irqsoff.c -rw-r--r-- 17.6 KB
trace_kdb.c -rw-r--r-- 3.5 KB
trace_kprobe.c -rw-r--r-- 51.1 KB
trace_kprobe_selftest.c -rw-r--r-- 353 bytes
trace_kprobe_selftest.h -rw-r--r-- 313 bytes
trace_mmiotrace.c -rw-r--r-- 8.6 KB
trace_nop.c -rw-r--r-- 2.2 KB
trace_output.c -rw-r--r-- 30.7 KB
trace_output.h -rw-r--r-- 1.3 KB
trace_preemptirq.c -rw-r--r-- 3.6 KB
trace_printk.c -rw-r--r-- 8.7 KB
trace_probe.c -rw-r--r-- 26.4 KB
trace_probe.h -rw-r--r-- 14.6 KB
trace_probe_tmpl.h -rw-r--r-- 5.6 KB
trace_recursion_record.c -rw-r--r-- 6.1 KB
trace_sched_switch.c -rw-r--r-- 3.1 KB
trace_sched_wakeup.c -rw-r--r-- 19.6 KB
trace_selftest.c -rw-r--r-- 26.3 KB
trace_selftest_dynamic.c -rw-r--r-- 270 bytes
trace_seq.c -rw-r--r-- 10.4 KB
trace_stack.c -rw-r--r-- 14.6 KB
trace_stat.c -rw-r--r-- 7.6 KB
trace_stat.h -rw-r--r-- 992 bytes
trace_synth.h -rw-r--r-- 868 bytes
trace_syscalls.c -rw-r--r-- 20.4 KB
trace_uprobe.c -rw-r--r-- 37.7 KB
tracing_map.c -rw-r--r-- 29.8 KB
tracing_map.h -rw-r--r-- 11.3 KB

back to top