From: Xuanqiang Luo <xuanqiang.luo@linux.dev>
To: Eric Dumazet <edumazet@google.com>
Cc: Simon Horman <horms@kernel.org>,
netdev@vger.kernel.org, eric.dumazet@gmail.com,
syzbot+586af68eb819833c2d91@syzkaller.appspotmail.com,
Allison Henderson <achender@kernel.org>,
rds-devel@oss.oracle.com,
"David S . Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>
Subject: Re: [PATCH net] net: skbuff: do not leave stale header offsets after pskb_carve()
Date: Sat, 12 Sep 2026 23:29:01 +0800 [thread overview]
Message-ID: <8a331d2f-526d-4aad-bad5-af84073c183d@linux.dev> (raw)
In-Reply-To: <CANn89iJYEGDBcFxC3kh1KPbvxs3Qh0aU8YrgH=h6xdHMJm0iyQ@mail.gmail.com>
在 2026/9/12 21:44, Eric Dumazet 写道:
> On Sat, Sep 12, 2026 at 6:39 AM Xuanqiang Luo <xuanqiang.luo@linux.dev> wrote:
>>
>> 在 2026/9/12 16:57, Eric Dumazet 写道:
>>> On Fri, Sep 11, 2026 at 11:38 PM luoxuanqiang <xuanqiang.luo@linux.dev> wrote:
>>>>
>>>> 在 2026/9/11 19:49, Eric Dumazet 写道:
>>>>> pskb_carve_inside_header() and pskb_carve_inside_nonlinear() remove
>>>>> the first bytes of a packet and reallocate skb->head.
>>>>>
>>>>> All the headers that were present before the operation are gone,
>>>>> but both functions call skb_headers_offset_update(skb, 0), which
>>>>> is a no-op : skb->mac_header, skb->network_header,
>>>>> skb->transport_header and skb->csum_start are left with their old
>>>>> values, now pointing into the freshly allocated (and possibly much
>>>>> smaller) skb->head.
>>>>>
>>>>> For pskb_carve_inside_nonlinear() the result is a zombie skb with
>>>>> an empty linear part (skb->data == skb_tail_pointer(skb),
>>>>> skb_headlen(skb) == 0) but skb_mac_header_was_set() still true and
>>>>> skb->mac_header pointing far beyond skb_end_pointer(skb).
>>>>>
>>>> Could you please clarify how the MAC pointer ends up beyond
>>>> skb_end_pointer() here? The carve helpers allocate based on the old
>>>> skb_end_offset(), and kmalloc_reserve() adds room for skb_shared_info,
>>>> so the new capacity shouldn't be smaller.
>>>>
>>>> The dump shows mac=234 and end=384. I understand how the stale offset
>>>> causes skb_pull() on an empty linear area and triggers the BUG, but I
>>>> don't see how it ends up beyond the new end. Am I missing another
>>>> condition?
>>>
>>> skb_headers_offset_update(skb, 0) is a no-op, so mac=234, net=248,
>>> trans=288 and csum_start=288 survive and now describe bytes that are not
>>> there anymore. skb_mac_header_was_set() still returns true, so drop_monitor
>>> does skb_pull(skb, 234) on an empty linear part and hits the BUG in
>>> __skb_pull().
>>>
>>> pskb_carve_inside_header() has the same issue, the remaining linear data is
>>> shifted by off bytes while the offsets are left untouched.
>>>
>> Thanks for the explanation. The fix itself looks correct to me, and I
>> understand why the stale MAC offset causes the BUG.
>>
>> Could I check my understanding of "far beyond skb_end_pointer()"?
>> The dump shows headroom=0 and headlen=0, so head=data=tail. With
>> end-tail=384 and mac=234, the MAC pointer is head+234, still before
>> end at head+384. For this nonlinear skb, did you mean beyond
>> skb_tail_pointer() rather than skb_end_pointer()?
>
> Is it an LLM which triggers your replies?
>
> Do you have an issue with the code?
Yes, I use an LLM to help analyze patches on the mailing list and polish
my replies. I only reply once I understand the relevant code.
I haven't found an issue with the code. My follow-up questions were only
about the commit message wording.
Sorry for repeatedly asking about that point.
Thanks,
next prev parent reply other threads:[~2026-09-12 15:29 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-11 11:49 [PATCH net] net: skbuff: do not leave stale header offsets after pskb_carve() Eric Dumazet
2026-09-11 16:13 ` Ivy Lopez
2026-09-12 6:38 ` luoxuanqiang
2026-09-12 8:57 ` Eric Dumazet
2026-09-12 13:39 ` Xuanqiang Luo
2026-09-12 13:44 ` Eric Dumazet
2026-09-12 15:29 ` Xuanqiang Luo [this message]
2026-09-12 15:40 ` Eric Dumazet
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=8a331d2f-526d-4aad-bad5-af84073c183d@linux.dev \
--to=xuanqiang.luo@linux.dev \
--cc=achender@kernel.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=eric.dumazet@gmail.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=rds-devel@oss.oracle.com \
--cc=syzbot+586af68eb819833c2d91@syzkaller.appspotmail.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.