From: Jiayuan Chen <[email protected]>
Date: Fri, 12 Jun 2026 21:07:48 +0800
> From: Zhang Cen <[email protected]>
> 
> SK_MSG uses msg->sg.copy as per-scatterlist-entry provenance. Entries
> with this bit set are copied before data/data_end are exposed to SK_MSG
> BPF programs for direct packet access.
> 
> bpf_msg_pull_data(), bpf_msg_push_data(), and bpf_msg_pop_data()
> rewrite the sk_msg scatterlist ring by collapsing, splitting, and
> shifting entries. These operations move msg->sg.data[] entries, but the
> parallel copy bitmap can be left behind on the old slot. A copied entry
> can then return to msg->sg.start with its copy bit clear and be exposed
> as directly writable packet data.
> 
> This corruption path requires an attached SK_MSG BPF program that calls
> the mutating helpers; ordinary sockmap/TLS traffic that never runs
> push/pop/pull helper sequences is not affected.
> 
> Keep msg->sg.copy synchronized with scatterlist entry moves, preserve
> the copy bit when an entry is split, clear it when a helper replaces an
> entry with a private page, and clear slots vacated by pull-data
> compaction.
> 
> Fixes: 015632bb30da ("bpf: sk_msg program helper bpf_sk_msg_pull_data")
> Fixes: 6fff607e2f14 ("bpf: sk_msg program helper bpf_msg_push_data")
> Fixes: 7246d8ed4dcc ("bpf: helper to pop data from messages")
> Cc: [email protected]
> Co-developed-by: Han Guidong <[email protected]>
> Reviewed-by: John Fastabend <[email protected]>
> Reviewed-by: Emil Tsalapatis <[email protected]>
> Signed-off-by: Han Guidong <[email protected]>
> Signed-off-by: Zhang Cen <[email protected]>
> Signed-off-by: Jiayuan Chen <[email protected]>

Reviewed-by: Kuniyuki Iwashima <[email protected]>

Reply via email to