Merge branch 'net-sched-act_ct-preserve-tc_skb_cb-across-defragmentation'

Zihan Xi says:

====================
net/sched: act_ct: preserve tc_skb_cb across defragmentation
====================

Link: https://patch.msgid.link/cover.1781358691.git.xizh2024@lzu.edu.cn
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Jakub Kicinski 2026-06-18 17:39:09 -07:00
commit 86590e2a22
2 changed files with 42 additions and 3 deletions

View File

@ -844,11 +844,11 @@ static int tcf_ct_handle_fragments(struct net *net, struct sk_buff *skb,
u8 family, u16 zone, bool *defrag)
{
enum ip_conntrack_info ctinfo;
struct tc_skb_cb cb;
struct nf_conn *ct;
int err = 0;
bool frag;
u8 proto;
u16 mru;
/* Previously seen (loopback)? Ignore. */
ct = nf_ct_get(skb, &ctinfo);
@ -862,12 +862,13 @@ static int tcf_ct_handle_fragments(struct net *net, struct sk_buff *skb,
if (err || !frag)
return err;
err = nf_ct_handle_fragments(net, skb, zone, family, &proto, &mru);
cb = *tc_skb_cb(skb);
err = nf_ct_handle_fragments(net, skb, zone, family, &proto, &cb.mru);
if (err)
return err;
*defrag = true;
tc_skb_cb(skb)->mru = mru;
*tc_skb_cb(skb) = cb;
return 0;
}

View File

@ -664,5 +664,43 @@
"teardown": [
"$TC qdisc del dev $DEV1 ingress_block 21 clsact"
]
},
{
"id": "9c2a",
"name": "Act_ct preserves skb cb across defrag before prio dequeue",
"category": [
"actions",
"ct",
"scapy"
],
"plugins": {
"requires": [
"nsPlugin",
"scapyPlugin"
]
},
"setup": [
"$TC qdisc add dev $DUMMY root handle 1: prio",
"$TC qdisc add dev $DUMMY clsact",
"$TC qdisc add dev $DEV1 clsact",
"$TC filter add dev $DEV1 ingress protocol ip prio 1 matchall action mirred egress redirect dev $DUMMY"
],
"cmdUnderTest": "$TC filter add dev $DUMMY egress protocol ip prio 1 matchall action ct zone 1 pipe",
"scapy": [
{
"iface": "$DEV0",
"count": 1,
"packet": "[Ether()/frag for frag in fragment(IP(src='10.0.0.10', dst='10.0.0.1', id=1)/UDP(sport=12345, dport=9)/Raw(b'A' * 4000), fragsize=1400)]"
}
],
"expExitCode": "0",
"verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 1 '^qdisc prio 1:'",
"matchPattern": "Sent [1-9][0-9]* bytes [1-9][0-9]* pkt",
"matchCount": "1",
"teardown": [
"$TC qdisc del dev $DEV1 clsact",
"$TC qdisc del dev $DUMMY clsact",
"$TC qdisc del dev $DUMMY root handle 1:"
]
}
]