[PATCH bpf v2 0/2] bpf, sockmap: fix forward allocation accounting in strparser self-pass path
From: Junseo Lim
Date: Sat Aug 01 2026 - 06:27:06 EST
The strparser SK_PASS path can queue cloned skbs back to the same socket.
When one TCP receive skb is split into many strparser messages, repeated
receive-owner transitions can leave sk_forward_alloc in deficit before
the next skb_set_owner_r() charge. Teardown can then uncharge more memcg
pages than were reserved and trigger a page_counter underflow warning.
Fix this by settling any existing sk_forward_alloc deficit with
sk_rmem_schedule(sk, skb, 0) before skb_set_owner_r() for strparser
self-pass skbs. The same handling is used when retrying from the psock
backlog.
Patch 2 adds a sockmap_strp selftest using a one-byte stream parser and
an SK_PASS verdict program. The test checks INET_DIAG_MEMINFO to verify
that sk_forward_alloc does not go negative after exercising the self-pass
delivery path.
Changelog:
v1 -> v2:
- Keep skb_set_owner_r() and use sk_rmem_schedule(sk, skb, 0) to settle
sk_forward_alloc instead of skipping the owner transition.
(Emil Tsalapatis)
- Apply the same handling to psock backlog retries.
- Add a sockmap_strp selftest based on the reproducer.
- Add a Reported-by tag.
- Change the Fixes tag to point to the commit that introduced the issue.
v1: https://lore.kernel.org/bpf/20260723065244.186916-1-zirajs7@xxxxxxxxx/T/
Junseo Lim (2):
bpf, sockmap: settle sk_forward_alloc for strparser SK_PASS
selftests/bpf: Cover strparser self-pass forward allocation
net/core/skmsg.c | 33 ++--
.../selftests/bpf/prog_tests/sockmap_strp.c | 171 ++++++++++++++++++
.../selftests/bpf/progs/test_sockmap_strp.c | 6 +
3 files changed, 199 insertions(+), 11 deletions(-)
--
2.55.0