diff options
| author | Paolo Abeni <pabeni@redhat.com> | 2026-06-01 13:35:51 +0200 |
|---|---|---|
| committer | Paolo Abeni <pabeni@redhat.com> | 2026-06-01 13:42:12 +0200 |
| commit | c2c0486c56800ce276e79c40a6e576ffd672f2a9 (patch) | |
| tree | 772e6e01d5c2b8ed08f705533e35eed3efcd2676 /net/core | |
| parent | 8415598365503ced2e3d019491b0a2756c85c494 (diff) | |
| parent | f3be0c984ecbcb82b0bec408022c4ef738cb3843 (diff) | |
| download | linux-next-c2c0486c56800ce276e79c40a6e576ffd672f2a9.tar.gz linux-next-c2c0486c56800ce276e79c40a6e576ffd672f2a9.zip | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Conflicts:
drivers/net/ethernet/microsoft/mana/mana_en.c:
17bfe0a8c014e ("net: mana: Add NULL guards in teardown path to prevent panic on attach failure")
d07efe5a6e641 ("net: mana: Use per-queue allocation for tx_qp to reduce allocation size")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Diffstat (limited to 'net/core')
| -rw-r--r-- | net/core/filter.c | 2 | ||||
| -rw-r--r-- | net/core/skbuff.c | 10 |
2 files changed, 11 insertions, 1 deletions
diff --git a/net/core/filter.c b/net/core/filter.c index 9590877b0714..80439767e0ee 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -2869,7 +2869,7 @@ BPF_CALL_4(bpf_msg_push_data, struct sk_msg *, msg, u32, start, psge->length = start - offset; rsge.length -= psge->length; - rsge.offset += start; + rsge.offset += start - offset; sk_msg_iter_var_next(i); sg_unmark_end(psge); diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 78e75b1b2696..c64693fcb2d1 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -6824,6 +6824,11 @@ static int pskb_carve_inside_header(struct sk_buff *skb, const u32 off, skb_copy_from_linear_data_offset(skb, off, data, new_hlen); skb->len -= off; + /* Remove SKBFL_MANAGED_FRAG_REFS instead of trying to honour it + * while refcounting frags below. + */ + skb_zcopy_downgrade_managed(skb); + memcpy((struct skb_shared_info *)(data + size), skb_shinfo(skb), offsetof(struct skb_shared_info, @@ -6937,6 +6942,11 @@ static int pskb_carve_inside_nonlinear(struct sk_buff *skb, const u32 off, return -ENOMEM; size = SKB_WITH_OVERHEAD(size); + /* Remove SKBFL_MANAGED_FRAG_REFS instead of trying to honour it + * while refcounting frags below. + */ + skb_zcopy_downgrade_managed(skb); + memcpy((struct skb_shared_info *)(data + size), skb_shinfo(skb), offsetof(struct skb_shared_info, frags[0])); if (skb_orphan_frags(skb, gfp_mask)) { |
