From: syzbot <syzbot+b4d960daf7a3c7c2b7b1@syzkaller.appspotmail.com>
To: linux-kernel@vger.kernel.org, syzkaller-bugs@googlegroups.com
Subject: Forwarded: Re: [syzbot] [kvm?] [net?] [virt?] WARNING in virtio_transport_send_pkt_info
Date: Tue, 12 Aug 2025 01:39:13 -0700 [thread overview]
Message-ID: <689afdb1.050a0220.7f033.0114.GAE@google.com> (raw)
In-Reply-To: <689a3d92.050a0220.7f033.00ff.GAE@google.com>
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org, syzkaller-bugs@googlegroups.com.
***
Subject: Re: [syzbot] [kvm?] [net?] [virt?] WARNING in virtio_transport_send_pkt_info
Author: mst@redhat.com
#syz test: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
diff --git a/lib/iov_iter.c b/lib/iov_iter.c
index f9193f952f49..a8c90676d715 100644
--- a/lib/iov_iter.c
+++ b/lib/iov_iter.c
@@ -1149,10 +1149,15 @@ static ssize_t __iov_iter_get_pages_alloc(struct iov_iter *i,
{
unsigned int n, gup_flags = 0;
+ pr_err("DEBUG: __iov_iter_get_pages_alloc: initial maxsize=%zu, i->count=%zu\n",
+ maxsize, i->count);
+
if (maxsize > i->count)
maxsize = i->count;
- if (!maxsize)
+ if (!maxsize) {
+ pr_err("DEBUG: __iov_iter_get_pages_alloc: returning 0 - no maxsize\n");
return 0;
+ }
if (maxsize > MAX_RW_COUNT)
maxsize = MAX_RW_COUNT;
@@ -1166,15 +1171,31 @@ static ssize_t __iov_iter_get_pages_alloc(struct iov_iter *i,
gup_flags |= FOLL_NOFAULT;
addr = first_iovec_segment(i, &maxsize);
+ pr_err("DEBUG: first_iovec_segment returned addr=%lx, maxsize_after=%zu\n",
+ addr, maxsize);
+
*start = addr % PAGE_SIZE;
addr &= PAGE_MASK;
n = want_pages_array(pages, maxsize, *start, maxpages);
+
+ pr_err("DEBUG: want_pages_array returned n=%u, addr=%lx, start=%zu\n",
+ n, addr, *start);
+
if (!n)
return -ENOMEM;
+
res = get_user_pages_fast(addr, n, gup_flags, *pages);
+
+ pr_err("DEBUG: get_user_pages_fast returned res=%d (requested n=%u)\n",
+ res, n);
+
if (unlikely(res <= 0))
return res;
+
maxsize = min_t(size_t, maxsize, res * PAGE_SIZE - *start);
+
+ pr_err("DEBUG: final maxsize=%zu, advancing iterator\n", maxsize);
+
iov_iter_advance(i, maxsize);
return maxsize;
}
@@ -1213,11 +1234,21 @@ static ssize_t __iov_iter_get_pages_alloc(struct iov_iter *i,
ssize_t iov_iter_get_pages2(struct iov_iter *i, struct page **pages,
size_t maxsize, unsigned maxpages, size_t *start)
{
+ ssize_t result;
+
+ pr_err("DEBUG: iov_iter_get_pages2: maxsize=%zu, maxpages=%u, iter_count=%zu, iter_type=%u\n",
+ maxsize, maxpages, iov_iter_count(i), i->iter_type);
+
if (!maxpages)
return 0;
BUG_ON(!pages);
- return __iov_iter_get_pages_alloc(i, &pages, maxsize, maxpages, start);
+ result = __iov_iter_get_pages_alloc(i, &pages, maxsize, maxpages, start);
+
+ pr_err("DEBUG: iov_iter_get_pages2: returning result=%zd, start=%zu, iter_count_after=%zu\n",
+ result, start ? *start : 0, iov_iter_count(i));
+
+ return result;
}
EXPORT_SYMBOL(iov_iter_get_pages2);
diff --git a/net/core/datagram.c b/net/core/datagram.c
index 94cc4705e91d..135dc37bd746 100644
--- a/net/core/datagram.c
+++ b/net/core/datagram.c
@@ -623,6 +623,21 @@ int zerocopy_fill_skb_from_iter(struct sk_buff *skb,
{
int frag = skb_shinfo(skb)->nr_frags;
+ pr_err("DEBUG: zerocopy_fill_skb_from_iter: initial length=%zu, iov_iter_count=%zu, iter_type=%u\n",
+ length, iov_iter_count(from), from->iter_type);
+
+ if (from->iter_type == ITER_IOVEC) {
+ pr_err("DEBUG: IOVEC iterator: nr_segs=%lu, iov_offset=%zu\n",
+ from->nr_segs, from->iov_offset);
+ if (from->__iov && from->nr_segs > 0) {
+ pr_err("DEBUG: Current iovec[0]: base=%px, len=%zu\n",
+ from->__iov[0].iov_base, from->__iov[0].iov_len);
+ if (from->nr_segs > 1)
+ pr_err("DEBUG: Next iovec[1]: base=%px, len=%zu\n",
+ from->__iov[1].iov_base, from->__iov[1].iov_len);
+ }
+ }
+
if (!skb_frags_readable(skb))
return -EFAULT;
@@ -633,16 +648,32 @@ int zerocopy_fill_skb_from_iter(struct sk_buff *skb,
size_t start;
ssize_t copied;
+ pr_err("DEBUG: zerocopy loop: length=%zu, iov_iter_count=%zu, frag=%d\n",
+ length, iov_iter_count(from), frag);
+
if (frag == MAX_SKB_FRAGS)
return -EMSGSIZE;
copied = iov_iter_get_pages2(from, pages, length,
- MAX_SKB_FRAGS - frag, &start);
+ MAX_SKB_FRAGS - frag, &start);
+
+ pr_err("DEBUG: iov_iter_get_pages2 returned copied=%zd, start=%zu\n",
+ copied, start);
+ pr_err("DEBUG: iterator state after get_pages2: iov_iter_count=%zu\n",
+ iov_iter_count(from));
+
if (copied < 0)
return -EFAULT;
+ if (copied == 0 && iov_iter_count(from) > 0)
+ pr_err("BUG: iov_iter_get_pages2 returned 0 but iterator claims %zu bytes remaining (requested %zu bytes)\n",
+ iov_iter_count(from), length);
+
length -= copied;
+ pr_err("DEBUG: after processing: length=%zu, iov_iter_count=%zu, copied=%zd\n",
+ length, iov_iter_count(from), copied);
+
skb->data_len += copied;
skb->len += copied;
skb->truesize += PAGE_ALIGN(copied + start);
@@ -686,6 +717,12 @@ int zerocopy_fill_skb_from_iter(struct sk_buff *skb,
if (refs)
page_ref_sub(last_head, refs);
}
+
+ pr_err("DEBUG: zerocopy_fill_skb_from_iter: loop exit - length=%zu, iov_iter_count=%zu\n",
+ length, iov_iter_count(from));
+ pr_err("DEBUG: zerocopy_fill_skb_from_iter: final skb->len=%u, skb->data_len=%u\n",
+ skb->len, skb->data_len);
+
return 0;
}
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index fe92e5fa95b4..25300125b789 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -288,7 +288,14 @@ static struct sk_buff *virtio_transport_alloc_skb(struct virtio_vsock_pkt_info *
if (info->msg && payload_len > 0) {
int err;
+ pr_err("DEBUG: virtio_transport_alloc_skb: calling fill_skb with payload_len=%zu, zcopy=%d\n",
+ payload_len, zcopy);
+
err = virtio_transport_fill_skb(skb, info, payload_len, zcopy);
+
+ pr_err("DEBUG: virtio_transport_fill_skb returned err=%d, skb->len=%u\n",
+ err, skb->len);
+
if (err)
goto out;
next prev parent reply other threads:[~2025-08-12 8:39 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-11 18:59 [syzbot] [kvm?] [net?] [virt?] WARNING in virtio_transport_send_pkt_info syzbot
2025-08-12 8:39 ` syzbot [this message]
2025-08-12 9:26 ` Michael S. Tsirkin
2025-08-12 9:48 ` syzbot
2025-08-12 9:27 ` Michael S. Tsirkin
2025-08-12 10:03 ` syzbot
2025-08-12 10:15 ` Michael S. Tsirkin
2025-08-15 10:09 ` Will Deacon
2025-08-15 10:44 ` Michael S. Tsirkin
2025-08-15 12:00 ` Will Deacon
2025-08-15 15:48 ` Will Deacon
2025-08-16 0:08 ` Hillf Danton
2025-08-16 0:30 ` syzbot
2025-08-16 10:34 ` Michael S. Tsirkin
2025-08-18 14:52 ` Will Deacon
2025-08-13 12:41 ` Hillf Danton
2025-08-13 13:03 ` syzbot
2025-08-13 15:43 ` Forwarded: " syzbot
2025-08-13 16:31 ` syzbot
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=689afdb1.050a0220.7f033.0114.GAE@google.com \
--to=syzbot+b4d960daf7a3c7c2b7b1@syzkaller.appspotmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=syzkaller-bugs@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.