From: Greg Kroah-Hartman Date: Mon, 13 Jan 2020 18:40:12 +0000 (+0100) Subject: 4.9-stable patches X-Git-Tag: v4.4.210~26 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c6bf603e1ece0ab6932e8db58df1b834cd267d44;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: tcp-minimize-false-positives-on-tcp-gro-check.patch --- diff --git a/queue-4.9/series b/queue-4.9/series index 7c1c63fb510..d87ae693032 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -2,3 +2,4 @@ kobject-export-kobject_get_unless_zero.patch chardev-avoid-potential-use-after-free-in-chrdev_open.patch usb-chipidea-host-disable-port-power-only-if-previously-enabled.patch alsa-usb-audio-apply-the-sample-rate-quirk-for-bose-companion-5.patch +tcp-minimize-false-positives-on-tcp-gro-check.patch diff --git a/queue-4.9/tcp-minimize-false-positives-on-tcp-gro-check.patch b/queue-4.9/tcp-minimize-false-positives-on-tcp-gro-check.patch new file mode 100644 index 00000000000..e1bc35bd599 --- /dev/null +++ b/queue-4.9/tcp-minimize-false-positives-on-tcp-gro-check.patch @@ -0,0 +1,76 @@ +From 0b9aefea860063bb39e36bd7fe6c7087fed0ba87 Mon Sep 17 00:00:00 2001 +From: Marcelo Ricardo Leitner +Date: Sat, 1 Apr 2017 11:00:21 -0300 +Subject: tcp: minimize false-positives on TCP/GRO check + +From: Marcelo Ricardo Leitner + +commit 0b9aefea860063bb39e36bd7fe6c7087fed0ba87 upstream. + +Markus Trippelsdorf reported that after commit dcb17d22e1c2 ("tcp: warn +on bogus MSS and try to amend it") the kernel started logging the +warning for a NIC driver that doesn't even support GRO. + +It was diagnosed that it was possibly caused on connections that were +using TCP Timestamps but some packets lacked the Timestamps option. As +we reduce rcv_mss when timestamps are used, the lack of them would cause +the packets to be bigger than expected, although this is a valid case. + +As this warning is more as a hint, getting a clean-cut on the +threshold is probably not worth the execution time spent on it. This +patch thus alleviates the false-positives with 2 quick checks: by +accounting for the entire TCP option space and also checking against the +interface MTU if it's available. + +These changes, specially the MTU one, might mask some real positives, +though if they are really happening, it's possible that sooner or later +it will be triggered anyway. + +Reported-by: Markus Trippelsdorf +Cc: Eric Dumazet +Signed-off-by: Marcelo Ricardo Leitner +Signed-off-by: David S. Miller +Cc: Salvatore Bonaccorso +Signed-off-by: Greg Kroah-Hartman + +--- + net/ipv4/tcp_input.c | 14 +++++++++----- + 1 file changed, 9 insertions(+), 5 deletions(-) + +--- a/net/ipv4/tcp_input.c ++++ b/net/ipv4/tcp_input.c +@@ -129,7 +129,8 @@ int sysctl_tcp_invalid_ratelimit __read_ + #define REXMIT_LOST 1 /* retransmit packets marked lost */ + #define REXMIT_NEW 2 /* FRTO-style transmit of unsent/new packets */ + +-static void tcp_gro_dev_warn(struct sock *sk, const struct sk_buff *skb) ++static void tcp_gro_dev_warn(struct sock *sk, const struct sk_buff *skb, ++ unsigned int len) + { + static bool __once __read_mostly; + +@@ -140,8 +141,9 @@ static void tcp_gro_dev_warn(struct sock + + rcu_read_lock(); + dev = dev_get_by_index_rcu(sock_net(sk), skb->skb_iif); +- pr_warn("%s: Driver has suspect GRO implementation, TCP performance may be compromised.\n", +- dev ? dev->name : "Unknown driver"); ++ if (!dev || len >= dev->mtu) ++ pr_warn("%s: Driver has suspect GRO implementation, TCP performance may be compromised.\n", ++ dev ? dev->name : "Unknown driver"); + rcu_read_unlock(); + } + } +@@ -164,8 +166,10 @@ static void tcp_measure_rcv_mss(struct s + if (len >= icsk->icsk_ack.rcv_mss) { + icsk->icsk_ack.rcv_mss = min_t(unsigned int, len, + tcp_sk(sk)->advmss); +- if (unlikely(icsk->icsk_ack.rcv_mss != len)) +- tcp_gro_dev_warn(sk, skb); ++ /* Account for possibly-removed options */ ++ if (unlikely(len > icsk->icsk_ack.rcv_mss + ++ MAX_TCP_OPTION_SPACE)) ++ tcp_gro_dev_warn(sk, skb, len); + } else { + /* Otherwise, we make more careful check taking into account, + * that SACKs block is variable.