From: "Michael S. Tsirkin" <mst@redhat.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Xuan Zhuo <xuanzhuo@linux.alibaba.com>,
netdev <netdev@vger.kernel.org>,
Mat Martineau <mathew.j.martineau@linux.intel.com>,
virtualization@lists.linux-foundation.org,
Eric Dumazet <edumazet@google.com>,
syzbot <syzkaller@googlegroups.com>,
Jakub Kicinski <kuba@kernel.org>,
"David S . Miller" <davem@davemloft.net>,
Guenter Roeck <linux@roeck-us.net>
Subject: Re: [PATCH net-next] virtio-net: fix use-after-free in page_to_skb()
Date: Tue, 20 Apr 2021 06:07:33 -0400 [thread overview]
Message-ID: <20210420060715-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20210420094341.3259328-1-eric.dumazet@gmail.com>
On Tue, Apr 20, 2021 at 02:43:41AM -0700, Eric Dumazet wrote:
> From: Eric Dumazet <edumazet@google.com>
>
> KASAN/syzbot had 4 reports, one of them being:
>
> BUG: KASAN: slab-out-of-bounds in memcpy include/linux/fortify-string.h:191 [inline]
> BUG: KASAN: slab-out-of-bounds in page_to_skb+0x5cf/0xb70 drivers/net/virtio_net.c:480
> Read of size 12 at addr ffff888014a5f800 by task systemd-udevd/8445
>
> CPU: 0 PID: 8445 Comm: systemd-udevd Not tainted 5.12.0-rc8-next-20210419-syzkaller #0
> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
> Call Trace:
> <IRQ>
> __dump_stack lib/dump_stack.c:79 [inline]
> dump_stack+0x141/0x1d7 lib/dump_stack.c:120
> print_address_description.constprop.0.cold+0x5b/0x2f8 mm/kasan/report.c:233
> __kasan_report mm/kasan/report.c:419 [inline]
> kasan_report.cold+0x7c/0xd8 mm/kasan/report.c:436
> check_region_inline mm/kasan/generic.c:180 [inline]
> kasan_check_range+0x13d/0x180 mm/kasan/generic.c:186
> memcpy+0x20/0x60 mm/kasan/shadow.c:65
> memcpy include/linux/fortify-string.h:191 [inline]
> page_to_skb+0x5cf/0xb70 drivers/net/virtio_net.c:480
> receive_mergeable drivers/net/virtio_net.c:1009 [inline]
> receive_buf+0x2bc0/0x6250 drivers/net/virtio_net.c:1119
> virtnet_receive drivers/net/virtio_net.c:1411 [inline]
> virtnet_poll+0x568/0x10b0 drivers/net/virtio_net.c:1516
> __napi_poll+0xaf/0x440 net/core/dev.c:6962
> napi_poll net/core/dev.c:7029 [inline]
> net_rx_action+0x801/0xb40 net/core/dev.c:7116
> __do_softirq+0x29b/0x9fe kernel/softirq.c:559
> invoke_softirq kernel/softirq.c:433 [inline]
> __irq_exit_rcu+0x136/0x200 kernel/softirq.c:637
> irq_exit_rcu+0x5/0x20 kernel/softirq.c:649
> common_interrupt+0xa4/0xd0 arch/x86/kernel/irq.c:240
>
> Fixes: fb32856b16ad ("virtio-net: page_to_skb() use build_skb when there's sufficient tailroom")
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> Reported-by: syzbot <syzkaller@googlegroups.com>
> Reported-by: Guenter Roeck <linux@roeck-us.net>
> Reported-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
> Cc: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
> Cc: Jason Wang <jasowang@redhat.com>
> Cc: "Michael S. Tsirkin" <mst@redhat.com>
> Cc: virtualization@lists.linux-foundation.org
Acked-by: Michael S. Tsirkin <mst@redhat.com>
> ---
> drivers/net/virtio_net.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> index 8cd76037c72481200ea3e8429e9fdfec005dad85..2e28c04aa6351d2b4016f7d277ce104c4970069d 100644
> --- a/drivers/net/virtio_net.c
> +++ b/drivers/net/virtio_net.c
> @@ -385,6 +385,7 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi,
> struct sk_buff *skb;
> struct virtio_net_hdr_mrg_rxbuf *hdr;
> unsigned int copy, hdr_len, hdr_padded_len;
> + struct page *page_to_free = NULL;
> int tailroom, shinfo_size;
> char *p, *hdr_p;
>
> @@ -445,7 +446,7 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi,
> if (len)
> skb_add_rx_frag(skb, 0, page, offset, len, truesize);
> else
> - put_page(page);
> + page_to_free = page;
> goto ok;
> }
>
> @@ -479,6 +480,8 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi,
> hdr = skb_vnet_hdr(skb);
> memcpy(hdr, hdr_p, hdr_len);
> }
> + if (page_to_free)
> + put_page(page_to_free);
>
> if (metasize) {
> __skb_pull(skb, metasize);
> --
> 2.31.1.368.gbe11c130af-goog
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: "David S . Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, netdev <netdev@vger.kernel.org>,
Eric Dumazet <edumazet@google.com>,
syzbot <syzkaller@googlegroups.com>,
Guenter Roeck <linux@roeck-us.net>,
Mat Martineau <mathew.j.martineau@linux.intel.com>,
Xuan Zhuo <xuanzhuo@linux.alibaba.com>,
Jason Wang <jasowang@redhat.com>,
virtualization@lists.linux-foundation.org
Subject: Re: [PATCH net-next] virtio-net: fix use-after-free in page_to_skb()
Date: Tue, 20 Apr 2021 06:07:33 -0400 [thread overview]
Message-ID: <20210420060715-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20210420094341.3259328-1-eric.dumazet@gmail.com>
On Tue, Apr 20, 2021 at 02:43:41AM -0700, Eric Dumazet wrote:
> From: Eric Dumazet <edumazet@google.com>
>
> KASAN/syzbot had 4 reports, one of them being:
>
> BUG: KASAN: slab-out-of-bounds in memcpy include/linux/fortify-string.h:191 [inline]
> BUG: KASAN: slab-out-of-bounds in page_to_skb+0x5cf/0xb70 drivers/net/virtio_net.c:480
> Read of size 12 at addr ffff888014a5f800 by task systemd-udevd/8445
>
> CPU: 0 PID: 8445 Comm: systemd-udevd Not tainted 5.12.0-rc8-next-20210419-syzkaller #0
> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
> Call Trace:
> <IRQ>
> __dump_stack lib/dump_stack.c:79 [inline]
> dump_stack+0x141/0x1d7 lib/dump_stack.c:120
> print_address_description.constprop.0.cold+0x5b/0x2f8 mm/kasan/report.c:233
> __kasan_report mm/kasan/report.c:419 [inline]
> kasan_report.cold+0x7c/0xd8 mm/kasan/report.c:436
> check_region_inline mm/kasan/generic.c:180 [inline]
> kasan_check_range+0x13d/0x180 mm/kasan/generic.c:186
> memcpy+0x20/0x60 mm/kasan/shadow.c:65
> memcpy include/linux/fortify-string.h:191 [inline]
> page_to_skb+0x5cf/0xb70 drivers/net/virtio_net.c:480
> receive_mergeable drivers/net/virtio_net.c:1009 [inline]
> receive_buf+0x2bc0/0x6250 drivers/net/virtio_net.c:1119
> virtnet_receive drivers/net/virtio_net.c:1411 [inline]
> virtnet_poll+0x568/0x10b0 drivers/net/virtio_net.c:1516
> __napi_poll+0xaf/0x440 net/core/dev.c:6962
> napi_poll net/core/dev.c:7029 [inline]
> net_rx_action+0x801/0xb40 net/core/dev.c:7116
> __do_softirq+0x29b/0x9fe kernel/softirq.c:559
> invoke_softirq kernel/softirq.c:433 [inline]
> __irq_exit_rcu+0x136/0x200 kernel/softirq.c:637
> irq_exit_rcu+0x5/0x20 kernel/softirq.c:649
> common_interrupt+0xa4/0xd0 arch/x86/kernel/irq.c:240
>
> Fixes: fb32856b16ad ("virtio-net: page_to_skb() use build_skb when there's sufficient tailroom")
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> Reported-by: syzbot <syzkaller@googlegroups.com>
> Reported-by: Guenter Roeck <linux@roeck-us.net>
> Reported-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
> Cc: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
> Cc: Jason Wang <jasowang@redhat.com>
> Cc: "Michael S. Tsirkin" <mst@redhat.com>
> Cc: virtualization@lists.linux-foundation.org
Acked-by: Michael S. Tsirkin <mst@redhat.com>
> ---
> drivers/net/virtio_net.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> index 8cd76037c72481200ea3e8429e9fdfec005dad85..2e28c04aa6351d2b4016f7d277ce104c4970069d 100644
> --- a/drivers/net/virtio_net.c
> +++ b/drivers/net/virtio_net.c
> @@ -385,6 +385,7 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi,
> struct sk_buff *skb;
> struct virtio_net_hdr_mrg_rxbuf *hdr;
> unsigned int copy, hdr_len, hdr_padded_len;
> + struct page *page_to_free = NULL;
> int tailroom, shinfo_size;
> char *p, *hdr_p;
>
> @@ -445,7 +446,7 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi,
> if (len)
> skb_add_rx_frag(skb, 0, page, offset, len, truesize);
> else
> - put_page(page);
> + page_to_free = page;
> goto ok;
> }
>
> @@ -479,6 +480,8 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi,
> hdr = skb_vnet_hdr(skb);
> memcpy(hdr, hdr_p, hdr_len);
> }
> + if (page_to_free)
> + put_page(page_to_free);
>
> if (metasize) {
> __skb_pull(skb, metasize);
> --
> 2.31.1.368.gbe11c130af-goog
next prev parent reply other threads:[~2021-04-20 10:07 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-20 9:43 [PATCH net-next] virtio-net: fix use-after-free in page_to_skb() Eric Dumazet
2021-04-20 9:43 ` Eric Dumazet
2021-04-20 10:07 ` Michael S. Tsirkin [this message]
2021-04-20 10:07 ` Michael S. Tsirkin
2021-04-20 13:48 ` Guenter Roeck
2021-04-20 13:48 ` Guenter Roeck
2021-04-20 14:00 ` Eric Dumazet
2021-04-20 15:42 ` Guenter Roeck
2021-04-20 15:42 ` Guenter Roeck
2021-04-20 16:31 ` Eric Dumazet
2021-04-20 17:51 ` Guenter Roeck
2021-04-20 17:51 ` Guenter Roeck
2021-04-20 17:52 ` Eric Dumazet
2021-04-20 18:11 ` Eric Dumazet
2021-04-20 18:11 ` Eric Dumazet
2021-04-21 2:15 ` Jason Wang
2021-04-21 2:15 ` Jason Wang
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=20210420060715-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=eric.dumazet@gmail.com \
--cc=kuba@kernel.org \
--cc=linux@roeck-us.net \
--cc=mathew.j.martineau@linux.intel.com \
--cc=netdev@vger.kernel.org \
--cc=syzkaller@googlegroups.com \
--cc=virtualization@lists.linux-foundation.org \
--cc=xuanzhuo@linux.alibaba.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.