In the Linux kernel, the following vulnerability has been resolved:
net/sched: act_mirred: Fix blockcast recursion bypass leading to stack overflow
tcfmirredact() checks schedmirrednest against MIRREDNESTLIMIT (4) to prevent deep recursion. However, when the action uses blockcast (tcfmblockid != 0), the function returns at the tcfblockcast() call BEFORE reaching the counter increment. As a result, the recursion counter never advances and the limit check is entirely bypassed.
When two devices share a TC egress block with a mirred blockcast rule, a packet egressing on device A is mirrored to device B via blockcast; device B's egress TC re-enters tcfmirredact() via blockcast and mirrors back to A, creating an unbounded recursion loop:
tcfmirredact -> tcfblockcast -> tcfmirredtodev -> devqueuexmit -> schhandleegress -> tcfclassify -> tcfmirred_act -> (repeat)
This recursion continues until the kernel stack overflows.
The bug is reachable from an unprivileged user via unshare(CLONENEWUSER | CLONENEWNET): user namespaces grant CAPNETADMIN in the new network namespace, which is sufficient to create dummy devices, attach clsact qdiscs with shared blocks, and install mirred blockcast filters.
BUG: TASK stack guard page was hit at ffffc90000b7fff8 Oops: stack guard page: 0000 [#1] SMP KASAN NOPTI CPU: 2 UID: 1000 PID: 169 Comm: poc Not tainted 7.0.0-rc7-next-20260410 RIP: 0010:xasfind+0x17/0x480 Call Trace: xafind+0x17b/0x1d0 tcfmirredact+0x640/0x1060 tcfactionexec+0x400/0x530 basicclassify+0x128/0x1d0 tcfclassify+0xd83/0x1150 tc_run+0x328/0x620 _devqueuexmit+0x797/0x3100 tcfmirredtodev+0x7b1/0xf70 tcfmirredact+0x68a/0x1060 [repeating ~30+ times until stack overflow] Kernel panic - not syncing: Fatal exception in interrupt
Fix this by incrementing schedmirrednest before calling tcfblockcast() and decrementing it on return, mirroring the non-blockcast path. This ensures subsequent recursive entries see the updated counter and are correctly limited by MIRREDNEST_LIMIT.
{
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/63xxx/CVE-2026-63981.json",
"cna_assigner": "Linux"
}