[PATCH net-next v3 0/2] net: prevent mixing incompatible memory providers in skbs

From: Mina Almasry

Date: Tue Nov 03 2026 - 23:25:30 EST


Enforce that all fragments in a nonlinear skb come from compatible
memory providers (and for devmem, the exact same binding).

Patch 1 fixes skb->unreadable propagation in skb_split() and skb_shift().
Patch 2 adds skb_has_net_iovs(), skb_mem_provider_compat(), and
skb_frags_can_coalesce(), and enforces provider/binding compatibility
across TX, TCP, GRO, skb_shift(), and skb_try_coalesce().

v2 -> v3:
- Drop patch 2 ('netmem: store memory provider private pointer directly
in struct net_iov') and compare net_iov_owner(niov) (for devmem) /
niov->desc.pp (for other net_iov providers) directly in
skb_mem_provider_compat() (Stanislav Fomichev).
- Squash the skb_frags_can_coalesce() helper patch into its caller patch
(Stanislav Fomichev).
- v2: https://lore.kernel.org/netdev/20261102231827.4088254-1-almasrymina@xxxxxxxxxx/

v1 -> v2:
- Generalize the check across TX, TCP collapse, GRO, IP defrag,
skb_shift(), and skb_try_coalesce() by storing mp_priv directly in
struct net_iov and introducing skb_frags_can_coalesce().
- Fix skb->unreadable propagation in skb_split() and skb_shift().
- Add KUnit coverage for cross-provider and cross-binding rejection.
- v1: https://lore.kernel.org/netdev/20261008034027.1403188-1-almasrymina@xxxxxxxxxx/

Mina Almasry (2):
net: fix skb->unreadable propagation in skb_split() and skb_shift()
net: prevent mixing frags from different memory providers or bindings

include/linux/skbuff.h | 74 ++++++++++++++++++++++++++++++++++++++++++
include/net/tcp.h | 5 +--
net/core/datagram.c | 4 +--
net/core/dev.c | 14 +++-----
net/core/devmem.h | 22 +++++++++++++
net/core/gro.c | 16 +++------
net/core/net_test.c | 39 ++++++++++++++++++----
net/core/skbuff.c | 37 +++++++++++----------
net/ipv4/tcp.c | 2 +-
net/ipv4/tcp_output.c | 3 ++
10 files changed, 168 insertions(+), 48 deletions(-)


base-commit: 7b6ab4dbc156e2f96419715130b3d5738a306c93
--
2.56.0.385.gac671c819a-goog