mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 22:02:02 +00:00
net: mctp: copy skb ext data when fragmenting
[ Upstream commit1394c1dec1
] If we're fragmenting on local output, the original packet may contain ext data for the MCTP flows. We'll want this in the resulting fragment skbs too. So, do a skb_ext_copy() in the fragmentation path, and implement the MCTP-specific parts of an ext copy operation. Fixes:67737c4572
("mctp: Pass flow data & flow release events to drivers") Reported-by: Jian Zhang <zhangjian.3032@bytedance.com> Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au> Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
34c4db757e
commit
06460a1de7
2 changed files with 11 additions and 0 deletions
|
@ -6736,6 +6736,14 @@ static struct skb_ext *skb_ext_maybe_cow(struct skb_ext *old,
|
||||||
for (i = 0; i < sp->len; i++)
|
for (i = 0; i < sp->len; i++)
|
||||||
xfrm_state_hold(sp->xvec[i]);
|
xfrm_state_hold(sp->xvec[i]);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_MCTP_FLOWS
|
||||||
|
if (old_active & (1 << SKB_EXT_MCTP)) {
|
||||||
|
struct mctp_flow *flow = skb_ext_get_ptr(old, SKB_EXT_MCTP);
|
||||||
|
|
||||||
|
if (flow->key)
|
||||||
|
refcount_inc(&flow->key->refs);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
__skb_ext_put(old);
|
__skb_ext_put(old);
|
||||||
return new;
|
return new;
|
||||||
|
|
|
@ -843,6 +843,9 @@ static int mctp_do_fragment_route(struct mctp_route *rt, struct sk_buff *skb,
|
||||||
/* copy message payload */
|
/* copy message payload */
|
||||||
skb_copy_bits(skb, pos, skb_transport_header(skb2), size);
|
skb_copy_bits(skb, pos, skb_transport_header(skb2), size);
|
||||||
|
|
||||||
|
/* we need to copy the extensions, for MCTP flow data */
|
||||||
|
skb_ext_copy(skb2, skb);
|
||||||
|
|
||||||
/* do route */
|
/* do route */
|
||||||
rc = rt->output(rt, skb2);
|
rc = rt->output(rt, skb2);
|
||||||
if (rc)
|
if (rc)
|
||||||
|
|
Loading…
Reference in a new issue