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
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 |
Computing file changes ...