From f52e24b0ecabf94d0d8ae1d45ca017488f074971 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 28 Jul 2017 15:45:33 -0700 Subject: [PATCH] 4.9-stable patches added patches: net-reduce-skb_warn_bad_offload-noise.patch --- ...et-reduce-skb_warn_bad_offload-noise.patch | 99 +++++++++++++++++++ queue-4.9/series | 1 + 2 files changed, 100 insertions(+) create mode 100644 queue-4.9/net-reduce-skb_warn_bad_offload-noise.patch diff --git a/queue-4.9/net-reduce-skb_warn_bad_offload-noise.patch b/queue-4.9/net-reduce-skb_warn_bad_offload-noise.patch new file mode 100644 index 00000000000..d89197284c0 --- /dev/null +++ b/queue-4.9/net-reduce-skb_warn_bad_offload-noise.patch @@ -0,0 +1,99 @@ +From b2504a5dbef3305ef41988ad270b0e8ec289331c Mon Sep 17 00:00:00 2001 +From: Eric Dumazet +Date: Tue, 31 Jan 2017 10:20:32 -0800 +Subject: net: reduce skb_warn_bad_offload() noise + +From: Eric Dumazet + +commit b2504a5dbef3305ef41988ad270b0e8ec289331c upstream. + +Dmitry reported warnings occurring in __skb_gso_segment() [1] + +All SKB_GSO_DODGY producers can allow user space to feed +packets that trigger the current check. + +We could prevent them from doing so, rejecting packets, but +this might add regressions to existing programs. + +It turns out our SKB_GSO_DODGY handlers properly set up checksum +information that is needed anyway when packets needs to be segmented. + +By checking again skb_needs_check() after skb_mac_gso_segment(), +we should remove these pesky warnings, at a very minor cost. + +With help from Willem de Bruijn + +[1] +WARNING: CPU: 1 PID: 6768 at net/core/dev.c:2439 skb_warn_bad_offload+0x2af/0x390 net/core/dev.c:2434 +lo: caps=(0x000000a2803b7c69, 0x0000000000000000) len=138 data_len=0 gso_size=15883 gso_type=4 ip_summed=0 +Kernel panic - not syncing: panic_on_warn set ... + +CPU: 1 PID: 6768 Comm: syz-executor1 Not tainted 4.9.0 #5 +Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 + ffff8801c063ecd8 ffffffff82346bdf ffffffff00000001 1ffff100380c7d2e + ffffed00380c7d26 0000000041b58ab3 ffffffff84b37e38 ffffffff823468f1 + ffffffff84820740 ffffffff84f289c0 dffffc0000000000 ffff8801c063ee20 +Call Trace: + [] __dump_stack lib/dump_stack.c:15 [inline] + [] dump_stack+0x2ee/0x3ef lib/dump_stack.c:51 + [] panic+0x1fb/0x412 kernel/panic.c:179 + [] __warn+0x1c4/0x1e0 kernel/panic.c:542 + [] warn_slowpath_fmt+0xc5/0x100 kernel/panic.c:565 + [] skb_warn_bad_offload+0x2af/0x390 net/core/dev.c:2434 + [] __skb_gso_segment+0x482/0x780 net/core/dev.c:2706 + [] skb_gso_segment include/linux/netdevice.h:3985 [inline] + [] validate_xmit_skb+0x5c9/0xc20 net/core/dev.c:2969 + [] __dev_queue_xmit+0xe6b/0x1e70 net/core/dev.c:3383 + [] dev_queue_xmit+0x17/0x20 net/core/dev.c:3424 + [] packet_snd net/packet/af_packet.c:2930 [inline] + [] packet_sendmsg+0x32ed/0x4d30 net/packet/af_packet.c:2955 + [] sock_sendmsg_nosec net/socket.c:621 [inline] + [] sock_sendmsg+0xca/0x110 net/socket.c:631 + [] ___sys_sendmsg+0x8fa/0x9f0 net/socket.c:1954 + [] __sys_sendmsg+0x138/0x300 net/socket.c:1988 + [] SYSC_sendmsg net/socket.c:1999 [inline] + [] SyS_sendmsg+0x2d/0x50 net/socket.c:1995 + [] entry_SYSCALL_64_fastpath+0x1f/0xc2 + +Signed-off-by: Eric Dumazet +Reported-by: Dmitry Vyukov +Cc: Willem de Bruijn +Signed-off-by: David S. Miller +Cc: Mark Salyzyn +Signed-off-by: Greg Kroah-Hartman + +--- + net/core/dev.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +--- a/net/core/dev.c ++++ b/net/core/dev.c +@@ -2723,11 +2723,12 @@ static inline bool skb_needs_check(struc + struct sk_buff *__skb_gso_segment(struct sk_buff *skb, + netdev_features_t features, bool tx_path) + { ++ struct sk_buff *segs; ++ + if (unlikely(skb_needs_check(skb, tx_path))) { + int err; + +- skb_warn_bad_offload(skb); +- ++ /* We're going to init ->check field in TCP or UDP header */ + err = skb_cow_head(skb, 0); + if (err < 0) + return ERR_PTR(err); +@@ -2755,7 +2756,12 @@ struct sk_buff *__skb_gso_segment(struct + skb_reset_mac_header(skb); + skb_reset_mac_len(skb); + +- return skb_mac_gso_segment(skb, features); ++ segs = skb_mac_gso_segment(skb, features); ++ ++ if (unlikely(skb_needs_check(skb, tx_path))) ++ skb_warn_bad_offload(skb); ++ ++ return segs; + } + EXPORT_SYMBOL(__skb_gso_segment); + diff --git a/queue-4.9/series b/queue-4.9/series index 4c9e8d0eac5..b7bbd66adf5 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -1,2 +1,3 @@ af_key-add-lock-to-key-dump.patch pstore-make-spinlock-per-zone-instead-of-global.patch +net-reduce-skb_warn_bad_offload-noise.patch -- 2.47.3