From 236ebc60997e804da8e588fdf7b43c416fc8e7d5 Mon Sep 17 00:00:00 2001 From: Federico Cabiddu Date: Fri, 3 Apr 2026 12:36:55 +0200 Subject: [PATCH] MT#55283 kernel-module: zero queue_mapping before forwarding to fix Cilium throttle drop Change-Id: Ib559d291023bcb3ca691f0c8bd66a634ed451aff (cherry picked from commit ee99d86706b50034cab08d2486489a5fd9aa44af) (cherry picked from commit adbe87c16641a76ecbe22894781d8b94d61ca54a) --- kernel-module/xt_RTPENGINE.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/kernel-module/xt_RTPENGINE.c b/kernel-module/xt_RTPENGINE.c index 993afc7b8..f9859f599 100644 --- a/kernel-module/xt_RTPENGINE.c +++ b/kernel-module/xt_RTPENGINE.c @@ -4985,6 +4985,13 @@ static int send_proxy_packet4(struct sk_buff *skb, struct re_address *src, struc } ip_select_ident(net, skb, NULL); + /* Zero queue_mapping: the skb is a copy of the received packet and + * inherits the NIC RX queue index. On Cilium/GKE DPv2 nodes the + * egress TC BPF program (cil_to_netdev) uses queue_mapping as an EDT + * bandwidth-throttle aggregate key; a non-zero value enters the + * throttle code path which can tail-call into TC_ACT_SHOT when the + * aggregate slot is uninitialised. */ + skb->queue_mapping = 0; ip_local_out(net, skb->sk, skb); return 0; @@ -5080,6 +5087,9 @@ static int send_proxy_packet6(struct sk_buff *skb, struct re_address *src, struc skb->ip_summed = CHECKSUM_COMPLETE; } + /* Same reasoning as send_proxy_packet4: zero queue_mapping before + * handing the packet to the egress TC BPF program. */ + skb->queue_mapping = 0; ip6_local_out(net, skb->sk, skb); return 0;