From: sashiko-bot@kernel.org
To: "Josef Bacik" <josef@toxicpanda.com>
Cc: linux-rdma@vger.kernel.org, intel-wired-lan@lists.osuosl.org
Subject: Re: [PATCH net-next v2 05/10] xen/netfront: check for failure when pulling in xennet_fill_frags()
Date: Fri, 09 Oct 2026 21:03:57 +0000 [thread overview]
Message-ID: <sashiko-outbox-166070@kernel.org> (raw)
In-Reply-To: <20261008-b4-pskb-pull-tail-drivers-v2-5-8f2bd9bee138@toxicpanda.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] netfront: memory leak of head skb in xennet_poll() when xennet_fill_frags() fails
--
commit f1df1b5218b129f50d5ffc52995e379ca9e3fc59
Author: Josef Bacik <josef@toxicpanda.com>
xen/netfront: check for failure when pulling in xennet_fill_frags()
When the skb already has MAX_SKB_FRAGS frags, xennet_fill_frags() calls
__pskb_pull_tail() to free up a frag slot. That frees slots in two
ways: it pulls the start of the packet into the head, and it releases
empty frags, even when there's nothing left to pull.
Use pskb_may_pull() followed by skb_drop_empty_frags(), and take the
error path explicitly if either fails. pskb_may_pull() does nothing if
the head already holds pull_to bytes, so the BUG_ON() for pull_to <
skb_headlen(skb), which protected the subtraction, can go.
> diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
> index 2ed673649c488..007fa3bbc9e66 100644
> --- a/drivers/net/xen-netfront.c
> +++ b/drivers/net/xen-netfront.c
> @@ -1174,18 +1174,15 @@ static int xennet_fill_frags(struct netfront_queue *queue,
>
> RING_COPY_RESPONSE(&queue->rx, ++cons, &rx);
>
> - if (skb_shinfo(skb)->nr_frags == MAX_SKB_FRAGS) {
> - unsigned int pull_to = NETFRONT_SKB_CB(skb)->pull_to;
> -
> - BUG_ON(pull_to < skb_headlen(skb));
> - __pskb_pull_tail(skb, pull_to - skb_headlen(skb));
> - }
> - if (unlikely(skb_shinfo(skb)->nr_frags >= MAX_SKB_FRAGS)) {
> - xennet_set_rx_rsp_cons(queue,
> - ++cons + skb_queue_len(list));
> - kfree_skb(nskb);
> - return -ENOENT;
> - }
> + /* Out of frag slots: pull the start of the packet into the
> + * head and drop empty frags to make room.
> + */
> + if (skb_shinfo(skb)->nr_frags == MAX_SKB_FRAGS &&
> + unlikely(!pskb_may_pull(skb, NETFRONT_SKB_CB(skb)->pull_to) ||
> + skb_drop_empty_frags(skb, GFP_ATOMIC)))
> + goto err;
> + if (unlikely(skb_shinfo(skb)->nr_frags >= MAX_SKB_FRAGS))
> + goto err;
[Severity: Medium]
When xennet_fill_frags() returns an error here, the execution jumps to the err
label in xennet_poll() where it leaks the head skb:
drivers/net/xen-netfront.c:xennet_poll() {
...
skb = __skb_dequeue(&tmpq);
...
if (unlikely(xennet_fill_frags(queue, skb, &tmpq)))
goto err;
...
err:
while ((skb = __skb_dequeue(&tmpq)))
__skb_queue_tail(&errq, skb);
...
}
Because the while loop unconditionally overwrites the head skb variable without
freeing it or queuing it to errq, does this code permanently leak the head
packet?
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261008-b4-pskb-pull-tail-drivers-v2-0-8f2bd9bee138@toxicpanda.com?part=5
next prev parent reply other threads:[~2026-10-09 21:04 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-08 21:02 [PATCH net-next v2 00/10] net: stop calling __pskb_pull_tail() from drivers Josef Bacik
2026-10-08 21:02 ` [PATCH net-next v2 01/10] net: skbuff: add skb_drop_empty_frags() Josef Bacik
2026-10-09 21:03 ` sashiko-bot
2026-10-08 21:02 ` [PATCH net-next v2 02/10] net: ftmac100: check for failure when pulling in the RX header Josef Bacik
2026-10-09 21:04 ` sashiko-bot
2026-10-08 21:02 ` [PATCH net-next v2 03/10] net/mlx5e: check for failure when pulling the Ethernet header after XDP Josef Bacik
2026-10-09 21:03 ` sashiko-bot
2026-10-13 10:02 ` Tariq Toukan
2026-10-08 21:02 ` [PATCH net-next v2 04/10] net: niu: check for failure when pulling in the RX header Josef Bacik
2026-10-09 21:03 ` sashiko-bot
2026-10-08 21:02 ` [PATCH net-next v2 05/10] xen/netfront: check for failure when pulling in xennet_fill_frags() Josef Bacik
2026-10-09 21:03 ` sashiko-bot [this message]
2026-10-08 21:02 ` [PATCH net-next v2 06/10] e1000: use pskb_may_pull() in the 82544 TSO workaround Josef Bacik
2026-10-09 21:03 ` sashiko-bot
2026-10-08 21:02 ` [PATCH net-next v2 07/10] e1000e: use pskb_may_pull() in the 82571/2/3 " Josef Bacik
2026-10-09 21:04 ` sashiko-bot
2026-10-08 21:02 ` [PATCH net-next v2 08/10] netxen: use pskb_may_pull() to pull excess TX frags into the head Josef Bacik
2026-10-09 21:04 ` sashiko-bot
2026-10-08 21:02 ` [PATCH net-next v2 09/10] qlcnic: " Josef Bacik
2026-10-09 21:04 ` sashiko-bot
2026-10-08 21:02 ` [PATCH net-next v2 10/10] net: skbuff: don't reset truesize in skb_condense() if the pull fails Josef Bacik
2026-10-09 21:04 ` sashiko-bot
2026-10-08 21:11 ` [PATCH net-next v2 00/10] net: stop calling __pskb_pull_tail() from drivers Jakub Kicinski
2026-10-09 13:43 ` Josef Bacik
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=sashiko-outbox-166070@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=josef@toxicpanda.com \
--cc=linux-rdma@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/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.