summaryrefslogtreecommitdiff
path: root/net/mctp
diff options
context:
space:
mode:
authorJeremy Kerr <jk@codeconstruct.com.au>2024-02-19 12:51:54 +0300
committerPaolo Abeni <pabeni@redhat.com>2024-02-22 15:32:55 +0300
commit1394c1dec1c619a46867ed32791a29695372bff8 (patch)
tree8158ab99710caf5a19bad1acc578a0b9901d0805 /net/mctp
parent9acdc089c08884c1f1b4567efcd7290781ee8e3a (diff)
downloadlinux-1394c1dec1c619a46867ed32791a29695372bff8.tar.xz
net: mctp: copy skb ext data when fragmenting
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: 67737c457281 ("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>
Diffstat (limited to 'net/mctp')
-rw-r--r--net/mctp/route.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/net/mctp/route.c b/net/mctp/route.c
index 28648a7ec866..34e513113509 100644
--- a/net/mctp/route.c
+++ b/net/mctp/route.c
@@ -905,6 +905,9 @@ static int mctp_do_fragment_route(struct mctp_route *rt, struct sk_buff *skb,
/* copy message payload */
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 */
rc = rt->output(rt, skb2);
if (rc)