All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Eric Dumazet <edumazet@google.com>,
	syzbot <syzkaller@googlegroups.com>,
	"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 5.1 13/40] net-gro: fix use-after-free read in napi_gro_frags()
Date: Mon,  3 Jun 2019 11:09:06 +0200	[thread overview]
Message-ID: <20190603090523.447909637@linuxfoundation.org> (raw)
In-Reply-To: <20190603090522.617635820@linuxfoundation.org>

From: Eric Dumazet <edumazet@google.com>

[ Upstream commit a4270d6795b0580287453ea55974d948393e66ef ]

If a network driver provides to napi_gro_frags() an
skb with a page fragment of exactly 14 bytes, the call
to gro_pull_from_frag0() will 'consume' the fragment
by calling skb_frag_unref(skb, 0), and the page might
be freed and reused.

Reading eth->h_proto at the end of napi_frags_skb() might
read mangled data, or crash under specific debugging features.

BUG: KASAN: use-after-free in napi_frags_skb net/core/dev.c:5833 [inline]
BUG: KASAN: use-after-free in napi_gro_frags+0xc6f/0xd10 net/core/dev.c:5841
Read of size 2 at addr ffff88809366840c by task syz-executor599/8957

CPU: 1 PID: 8957 Comm: syz-executor599 Not tainted 5.2.0-rc1+ #32
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
 __dump_stack lib/dump_stack.c:77 [inline]
 dump_stack+0x172/0x1f0 lib/dump_stack.c:113
 print_address_description.cold+0x7c/0x20d mm/kasan/report.c:188
 __kasan_report.cold+0x1b/0x40 mm/kasan/report.c:317
 kasan_report+0x12/0x20 mm/kasan/common.c:614
 __asan_report_load_n_noabort+0xf/0x20 mm/kasan/generic_report.c:142
 napi_frags_skb net/core/dev.c:5833 [inline]
 napi_gro_frags+0xc6f/0xd10 net/core/dev.c:5841
 tun_get_user+0x2f3c/0x3ff0 drivers/net/tun.c:1991
 tun_chr_write_iter+0xbd/0x156 drivers/net/tun.c:2037
 call_write_iter include/linux/fs.h:1872 [inline]
 do_iter_readv_writev+0x5f8/0x8f0 fs/read_write.c:693
 do_iter_write fs/read_write.c:970 [inline]
 do_iter_write+0x184/0x610 fs/read_write.c:951
 vfs_writev+0x1b3/0x2f0 fs/read_write.c:1015
 do_writev+0x15b/0x330 fs/read_write.c:1058

Fixes: a50e233c50db ("net-gro: restore frag0 optimization")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 net/core/dev.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5804,7 +5804,6 @@ static struct sk_buff *napi_frags_skb(st
 	skb_reset_mac_header(skb);
 	skb_gro_reset_offset(skb);
 
-	eth = skb_gro_header_fast(skb, 0);
 	if (unlikely(skb_gro_header_hard(skb, hlen))) {
 		eth = skb_gro_header_slow(skb, hlen, 0);
 		if (unlikely(!eth)) {
@@ -5814,6 +5813,7 @@ static struct sk_buff *napi_frags_skb(st
 			return NULL;
 		}
 	} else {
+		eth = (const struct ethhdr *)skb->data;
 		gro_pull_from_frag0(skb, hlen);
 		NAPI_GRO_CB(skb)->frag0 += hlen;
 		NAPI_GRO_CB(skb)->frag0_len -= hlen;



  parent reply	other threads:[~2019-06-03  9:13 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-03  9:08 [PATCH 5.1 00/40] 5.1.7-stable review Greg Kroah-Hartman
2019-06-03  9:08 ` [PATCH 5.1 01/40] bonding/802.3ad: fix slave link initialization transition states Greg Kroah-Hartman
2019-06-03  9:08 ` [PATCH 5.1 02/40] cxgb4: offload VLAN flows regardless of VLAN ethtype Greg Kroah-Hartman
2019-06-03  9:08 ` [PATCH 5.1 03/40] ethtool: Check for vlan etype or vlan tci when parsing flow_rule Greg Kroah-Hartman
2019-06-03  9:08 ` [PATCH 5.1 04/40] inet: switch IP ID generator to siphash Greg Kroah-Hartman
2019-06-03  9:08 ` [PATCH 5.1 05/40] ipv4/igmp: fix another memory leak in igmpv3_del_delrec() Greg Kroah-Hartman
2019-06-03  9:08 ` [PATCH 5.1 06/40] ipv4/igmp: fix build error if !CONFIG_IP_MULTICAST Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 07/40] ipv6: Consider sk_bound_dev_if when binding a raw socket to an address Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 08/40] ipv6: Fix redirect with VRF Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 09/40] llc: fix skb leak in llc_build_and_send_ui_pkt() Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 10/40] mlxsw: spectrum_acl: Avoid warning after identical rules insertion Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 11/40] net: dsa: mv88e6xxx: fix handling of upper half of STATS_TYPE_PORT Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 12/40] net: fec: fix the clk mismatch in failed_reset path Greg Kroah-Hartman
2019-06-03  9:09 ` Greg Kroah-Hartman [this message]
2019-06-03  9:09 ` [PATCH 5.1 14/40] net: mvneta: Fix err code path of probe Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 15/40] net: mvpp2: fix bad MVPP2_TXQ_SCHED_TOKEN_CNTR_REG queue value Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 16/40] net: phy: marvell10g: report if the PHY fails to boot firmware Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 17/40] net: sched: dont use tc_action->order during action dump Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 18/40] net: stmmac: fix reset gpio free missing Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 19/40] r8169: fix MAC address being lost in PCI D3 Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 20/40] usbnet: fix kernel crash after disconnect Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 21/40] net/mlx5: Avoid double free in fs init error unwinding path Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 22/40] tipc: Avoid copying bytes beyond the supplied data Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 23/40] net/mlx5: Allocate root ns memory using kzalloc to match kfree Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 24/40] net/mlx5e: Disable rxhash when CQE compress is enabled Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 26/40] net: stmmac: dma channel control register need to be init first Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 27/40] bnxt_en: Fix aggregation buffer leak under OOM condition Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 28/40] bnxt_en: Fix possible BUG() condition when calling pci_disable_msix() Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 29/40] bnxt_en: Reduce memory usage when running in kdump kernel Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 30/40] net/tls: fix lowat calculation if some data came from previous record Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 31/40] selftests/tls: test for lowat overshoot with multiple records Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 32/40] net/tls: fix no wakeup on partial reads Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 33/40] selftests/tls: add test for sleeping even though there is data Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 34/40] net/tls: fix state removal with feature flags off Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 35/40] net/tls: dont ignore netdev notifications if no TLS features Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 36/40] cxgb4: Revert "cxgb4: Remove SGE_HOST_PAGE_SIZE dependency on page size" Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 37/40] net: correct zerocopy refcnt with udp MSG_MORE Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 38/40] crypto: vmx - ghash: do nosimd fallback manually Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 39/40] Revert "tipc: fix modprobe tipc failed after switch order of device registration" Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.1 40/40] tipc: fix modprobe tipc failed after switch order of device registration Greg Kroah-Hartman
2019-06-03 14:49 ` [PATCH 5.1 00/40] 5.1.7-stable review kernelci.org bot
2019-06-03 18:28   ` Kevin Hilman
2019-06-04  5:49     ` Greg Kroah-Hartman
2019-06-03 17:17 ` Guenter Roeck
2019-06-04  5:51   ` Greg Kroah-Hartman
2019-06-03 18:34 ` Jon Hunter
2019-06-03 18:34   ` Jon Hunter
2019-06-04  5:50   ` Greg Kroah-Hartman
2019-06-03 19:33 ` Naresh Kamboju
2019-06-04  5:51   ` Greg Kroah-Hartman
2019-06-03 23:31 ` shuah
2019-06-04  5:50   ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190603090523.447909637@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=syzkaller@googlegroups.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.