All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hyunwoo Kim <imv4bel@gmail.com>
To: Ben Hutchings <ben@decadent.org.uk>
Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
	pabeni@redhat.com, steffen.klassert@secunet.com,
	herbert@gondor.apana.org.au, dsahern@kernel.org, vakzz@zellic.io,
	stable@vger.kernel.org, netdev@vger.kernel.org,
	imv4bel@gmail.com
Subject: Re: [PATCH net] net: skbuff: propagate shared-frag marker through pskb_copy()
Date: Thu, 14 May 2026 03:30:51 +0900	[thread overview]
Message-ID: <agTDW-mJqKCSEE17@v4bel> (raw)
In-Reply-To: <agSx78pXBFCdn08p@v4bel>

On Thu, May 14, 2026 at 02:16:31AM +0900, Hyunwoo Kim wrote:
> On Wed, May 13, 2026 at 06:21:45PM +0200, Ben Hutchings wrote:
> > On Wed, 2026-05-13 at 20:25 +0900, Hyunwoo Kim wrote:
> > > __pskb_copy_fclone() shallow-copies the source's frag descriptors and
> > > bumps each page's refcount via skb_frag_ref(), then defers the rest
> > > of the shinfo metadata to skb_copy_header().  That helper only carries
> > > over gso_{size,segs,type} and never touches skb_shinfo()->flags, so
> > > the destination skb keeps a reference to the same externally-owned or
> > > page-cache-backed pages while reporting skb_has_shared_frag() as
> > > false.
> > >
> > > The mismatch is harmful in any in-place writer that uses
> > > skb_has_shared_frag() to decide whether shared pages must be detoured
> > > through skb_cow_data().  ESP input is one such writer (esp4.c,
> > > esp6.c), and a single nft 'dup to <local>' rule -- or any other
> > > nf_dup_ipv4() / xt_TEE caller -- is enough to land a pskb_copy()'d
> > > skb in esp_input() with the marker stripped, letting an unprivileged
> > > user write into the page cache of a root-owned read-only file via
> > > authencesn-ESN stray writes.
> > > 
> > > Set SKBFL_SHARED_FRAG on the destination whenever frag descriptors
> > > were actually moved from the source.  skb_copy() and skb_copy_expand()
> > > share skb_copy_header() too but linearize all paged data into freshly
> > > allocated head storage and emerge with nr_frags == 0, so
> > > skb_has_shared_frag() returns false on its own; they need no change.
> > 
> > What about skb_shift()?  It seems like that should also propagate this
> > flag.  But I could be missing some reason why it's not necessary.
> 
> Yes, since skb_shift() is also a function that moves frag descriptors, 
> I think SHARED_FRAG should be propagated as well. The actual trigger 
> conditions are tricky (not deterministic) due to TCP write-queue skb 
> merging, but I believe the fix is the right thing to do. 
> 
> I'm planning to submit a v2 patch. What do you think?

And skb_gro_receive() also appears to need work. Further testing is 
in progress...

> 
> 
> Best regards,
> Hyunwoo Kim

      reply	other threads:[~2026-05-13 18:30 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-13 11:25 [PATCH net] net: skbuff: propagate shared-frag marker through pskb_copy() Hyunwoo Kim
2026-05-13 16:21 ` Ben Hutchings
2026-05-13 16:24   ` Hyunwoo Kim
2026-05-13 17:16   ` Hyunwoo Kim
2026-05-13 18:30     ` Hyunwoo Kim [this message]

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=agTDW-mJqKCSEE17@v4bel \
    --to=imv4bel@gmail.com \
    --cc=ben@decadent.org.uk \
    --cc=davem@davemloft.net \
    --cc=dsahern@kernel.org \
    --cc=edumazet@google.com \
    --cc=herbert@gondor.apana.org.au \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=stable@vger.kernel.org \
    --cc=steffen.klassert@secunet.com \
    --cc=vakzz@zellic.io \
    /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.