From ec96507925e09f7f60ccbd13bcf0cab473221166 Mon Sep 17 00:00:00 2001 From: Jukka Rissanen Date: Thu, 19 Dec 2024 11:23:08 +0200 Subject: [PATCH] net: pkt: Clone all needed attributes The net_pkt_clone() did not cloned all needed fields. Added what was missing from the clone. Fixes #83157 Signed-off-by: Jukka Rissanen --- subsys/net/ip/net_pkt.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/subsys/net/ip/net_pkt.c b/subsys/net/ip/net_pkt.c index 792e9f12a9f..2c1a4d3089d 100644 --- a/subsys/net/ip/net_pkt.c +++ b/subsys/net/ip/net_pkt.c @@ -2068,16 +2068,25 @@ static void clone_pkt_attributes(struct net_pkt *pkt, struct net_pkt *clone_pkt) net_pkt_set_captured(clone_pkt, net_pkt_is_captured(pkt)); net_pkt_set_eof(clone_pkt, net_pkt_eof(pkt)); net_pkt_set_ptp(clone_pkt, net_pkt_is_ptp(pkt)); + net_pkt_set_ppp(clone_pkt, net_pkt_is_ppp(pkt)); + net_pkt_set_lldp(clone_pkt, net_pkt_is_lldp(pkt)); + net_pkt_set_ipv4_acd(clone_pkt, net_pkt_ipv4_acd(pkt)); net_pkt_set_tx_timestamping(clone_pkt, net_pkt_is_tx_timestamping(pkt)); net_pkt_set_rx_timestamping(clone_pkt, net_pkt_is_rx_timestamping(pkt)); net_pkt_set_forwarding(clone_pkt, net_pkt_forwarding(pkt)); net_pkt_set_chksum_done(clone_pkt, net_pkt_is_chksum_done(pkt)); net_pkt_set_ip_reassembled(pkt, net_pkt_is_ip_reassembled(pkt)); - + net_pkt_set_cooked_mode(clone_pkt, net_pkt_is_cooked_mode(pkt)); + net_pkt_set_ipv4_pmtu(clone_pkt, net_pkt_ipv4_pmtu(pkt)); net_pkt_set_l2_bridged(clone_pkt, net_pkt_is_l2_bridged(pkt)); net_pkt_set_l2_processed(clone_pkt, net_pkt_is_l2_processed(pkt)); net_pkt_set_ll_proto_type(clone_pkt, net_pkt_ll_proto_type(pkt)); +#if defined(CONFIG_NET_OFFLOAD) || defined(CONFIG_NET_L2_IPIP) + net_pkt_set_remote_address(clone_pkt, net_pkt_remote_address(pkt), + sizeof(struct sockaddr_storage)); +#endif + if (pkt->buffer && clone_pkt->buffer) { memcpy(net_pkt_lladdr_src(clone_pkt), net_pkt_lladdr_src(pkt), sizeof(struct net_linkaddr));