In the Linux kernel, the following vulnerability has been resolved:
net/sched: cls_bpf: prevent unbounded recursion in offload rollback
Quan Sun reported [1] a stack overflow in clsbpfoffload_cmd().
Reproducer on netdevsim: add a skipsw clsbpf filter, set the
bpftcaccept debugfs knob to 0, then tc filter replace. The replace
calls tcsetupcbreplace() which fails. clsbpfoffloadcmd() then
swaps prog/oldprog and recursively calls itself to roll back. But
bpftcaccept=0 makes the rollback fail too, which triggers yet another
rollback frame with the same arguments, and so on until the stack is
exhausted.
bpftcaccept is just a convenient knob for the reproducer. Any driver whose tcsetupcb_replace() fails twice in a row can hit the same loop, so this is not a netdevsim-only issue.
Two ways to fix it:
1) Have the rollback call tcsetupcbadd() on oldprog instead of re-entering clsbpfoffloadcmd(). 2) Mark the rollback frame with a flag and skip a second-level rollback from inside it.
Go with (2). It is the smaller change and keeps the original behaviour: the rollback still goes through tcsetupcb_replace(), so the driver gets one real chance to restore its state. If that attempt also fails, we just return the original error instead of recursing.
{
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/74xxx/CVE-2026-74382.json",
"cna_assigner": "Linux"
}