In the Linux kernel, the following vulnerability has been resolved:
net/sched: cls_fw: fix NULL dereference of "old" filters before change()
Like pointed out by Sashiko [1], since commit ed76f5edccc9 ("net: sched: protect filter_chain list with filter_chain_lock mutex") TC filters are added to a shared block and published to datapath before their ->change() function is called. This is a problem for cls_fw: an invalid filter created with the "old" method can still classify some packets before it is destroyed by the validation logic added by Xiang. Therefore, insisting with repeated runs of the following script:
# ip link add dev crash0 type dummy # ip link set dev crash0 up # mausezahn crash0 -c 100000 -P 10 \ > -A 4.3.2.1 -B 1.2.3.4 -t udp "dp=1234" -q & # sleep 1 # tc qdisc add dev crash0 egress_block 1 clsact # tc filter add block 1 protocol ip prio 1 matchall \ > action skbedit mark 65536 continue # tc filter add block 1 protocol ip prio 2 fw # ip link del dev crash0
can still make fw_classify() hit the WARN_ON() in [2]:
WARNING: ./include/net/pkt_cls.h:88 at fw_classify+0x244/0x250 [cls_fw], CPU#18: mausezahn/1399 Modules linked in: cls_fw(E) act_skbedit(E) CPU: 18 UID: 0 PID: 1399 Comm: mausezahn Tainted: G E 7.0.0-rc6-virtme #17 PREEMPT(full) Tainted: [E]=UNSIGNED_MODULE Hardware name: Red Hat KVM, BIOS 1.16.3-2.el9 04/01/2014 RIP: 0010:fw_classify+0x244/0x250 [cls_fw] Code: 5c 49 c7 45 00 00 00 00 00 41 5d 41 5e 41 5f 5d c3 cc cc cc cc 5b b8 ff ff ff ff 41 5c 41 5d 41 5e 41 5f 5d c3 cc cc cc cc 90 <0f> 0b 90 eb a0 0f 1f 80 00 00 00 00 90 90 90 90 90 90 90 90 90 90 RSP: 0018:ffffd1b7026bf8a8 EFLAGS: 00010202 RAX: ffff8c5ac9c60800 RBX: ffff8c5ac99322c0 RCX: 0000000000000004 RDX: 0000000000000001 RSI: ffff8c5b74d7a000 RDI: ffff8c5ac8284f40 RBP: ffffd1b7026bf8d0 R08: 0000000000000000 R09: ffffd1b7026bf9b0 R10: 00000000ffffffff R11: 0000000000000000 R12: 0000000000010000 R13: ffffd1b7026bf930 R14: ffff8c5ac8284f40 R15: 0000000000000000 FS: 00007fca40c37740(0000) GS:ffff8c5b74d7a000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007fca40e822a0 CR3: 0000000005ca0001 CR4: 0000000000172ef0 Call Trace: <TASK> tcf_classify+0x17d/0x5c0 tc_run+0x9d/0x150 __dev_queue_xmit+0x2ab/0x14d0 ip_finish_output2+0x340/0x8f0 ip_output+0xa4/0x250 raw_sendmsg+0x147d/0x14b0 __sys_sendto+0x1cc/0x1f0 __x64_sys_sendto+0x24/0x30 do_syscall_64+0x126/0xf80 entry_SYSCALL_64_after_hwframe+0x77/0x7f RIP: 0033:0x7fca40e822ba Code: d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3 0f 1e fa 41 89 ca 64 8b 04 25 18 00 00 00 85 c0 75 15 b8 2c 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 7e c3 0f 1f 44 00 00 41 54 48 83 ec 30 44 89 RSP: 002b:00007ffc248a42c8 EFLAGS: 00000246 ORIG_RAX: 000000000000002c RAX: ffffffffffffffda RBX: 000055ef233289d0 RCX: 00007fca40e822ba RDX: 000000000000001e RSI: 000055ef23328c30 RDI: 0000000000000003 RBP: 000055ef233289d0 R08: 00007ffc248a42d0 R09: 0000000000000010 R10: 0000000000000000 R11: 0000000000000246 R12: 000000000000001e R13: 00000000000186a0 R14: 0000000000000000 R15: 00007fca41043000 </TASK> irq event stamp: 1045778 hardirqs last enabled at (1045784): [<ffffffff864ec042>] __up_console_sem+0x52/0x60 hardirqs last disabled at (1045789): [<ffffffff864ec027>] __up_console_sem+0x37/0x60 softirqs last enabled at (1045426): [<ffffffff874d48c7>] __alloc_skb+0x207/0x260 softirqs last disabled at (1045434): [<ffffffff874fe8f8>] __dev_queue_xmit+0x78/0x14d0
Then, because of the value in the packet's mark, dereference on 'q->handle' with NULL 'q' occurs:
BUG: kernel NULL pointer dereference, address: 0000000000000038 [...] RIP: 0010:fw_classify+0x1fe/0x250 [cls_fw] [...]
Skip "old-style" classification on shared blocks, so that the NULL dereference is fixed and WARN_ON() is not hit anymore in the short lifetime of invalid cls_fw "old-style" filters.
[1] https://sashiko.dev/#/patchset/2 ---truncated---
CVSS Details
- CVSS 3.1 Base Score: 5.5
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Amazon Linux Ami 2 | — | Upgrade kernel-tools-debuginfoUpgrade bpftool-debuginfoUpgrade kernel-tools-develUpgrade kernel-toolsUpgrade kernel-develUpgrade kernel-livepatch-5.15.204-143.229Upgrade kernel-livepatch-5.10.259-258.1043Upgrade bpftoolUpgrade kernel-debuginfo-common-aarch64Upgrade perfUpgrade kernelUpgrade python-perf-debuginfoUpgrade python-perfUpgrade perf-debuginfoUpgrade kernel-headersUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-debuginfo | Jul 7, 2026 | Jul 7, 2026 |
| Amazon_linux_2023 | — | Upgrade bpftool6.12Upgrade python3-perfUpgrade kernel-toolsUpgrade kernel-modules-extra-commonUpgrade bpftool6.12-debuginfoUpgrade perf6.12-debuginfoUpgrade kernel-tools-develUpgrade perfUpgrade kernel6.12-tools-debuginfoUpgrade kernel-headersUpgrade python3-perf6.12-debuginfoUpgrade kernel6.12-debuginfo-common-aarch64Upgrade kernel6.12-modules-extraUpgrade kernel6.12-debuginfoUpgrade kernelUpgrade perf-debuginfoUpgrade kernel-develUpgrade perf6.12Upgrade bpftoolUpgrade kernel6.12-tools-develUpgrade kernel-tools-debuginfoUpgrade python3-perf-debuginfoUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-modules-extraUpgrade python3-perf6.12Upgrade kernel-debuginfoUpgrade kernel6.12-toolsUpgrade kernel6.12-headersUpgrade kernel-livepatch-6.12.83-111.159Upgrade kernel-livepatch-6.1.170-208.319Upgrade kernel6.12-develUpgrade kernel6.12-debuginfo-common-x86_64Upgrade kernel-debuginfo-common-aarch64Upgrade kernel6.12Upgrade kernel6.12-modules-extra-commonUpgrade bpftool-debuginfo | Jul 8, 2026 | Jun 24, 2026 |
| Debian | — | Upgrade linux-6.1Upgrade linux | Jul 5, 2026 | Jul 5, 2026 |
| Redhat_linux | — | No solution exists | Jul 17, 2026 | Jun 24, 2026 |
| Ubuntu | — | Upgrade linux-image-nvidia-bos-64k-7.0Upgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-7.0.0-1003-gkeUpgrade linux-image-generic-7.0Upgrade linux-image-gke-hwe-26.04Upgrade linux-image-realtime-hwe-26.04Upgrade linux-image-realtimeUpgrade linux-image-oem-26.04Upgrade linux-image-gcp-64k-7.0Upgrade linux-image-7.0.0-1016-nvidia-64kUpgrade linux-image-virtual-hwe-26.04Upgrade linux-image-realtime-64k-7.0Upgrade linux-image-generic-64k-7.0Upgrade linux-image-7.0.0-1009-awsUpgrade linux-image-7.0.0-1011-gcp-64kUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-7.0.0-1008-oracleUpgrade linux-image-raspi-realtimeUpgrade linux-image-oem-7.0Upgrade linux-image-oem-24.04aUpgrade linux-image-nvidia-64kUpgrade linux-image-7.0.0-2016-nvidia-bosUpgrade linux-image-gcpUpgrade linux-image-awsUpgrade linux-image-azure-7.0Upgrade linux-image-azureUpgrade linux-image-nvidia-hwe-26.04Upgrade linux-image-raspi-7.0Upgrade linux-image-nvidia-bos-64kUpgrade linux-image-azure-fdeUpgrade linux-image-oracle-64k-7.0Upgrade linux-image-7.0.0-1011-gcpUpgrade linux-image-generic-hwe-26.04Upgrade linux-image-realtime-64k-hwe-26.04Upgrade linux-image-realtime-64kUpgrade linux-image-virtualUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-oracle-64kUpgrade linux-image-oem-24.04dUpgrade linux-image-oem-24.04cUpgrade linux-image-nvidia-64k-hwe-26.04Upgrade linux-image-gke-64k-7.0Upgrade linux-image-virtual-7.0Upgrade linux-image-gke-64kUpgrade linux-image-raspiUpgrade linux-image-aws-64kUpgrade linux-image-7.0.0-1014-azureUpgrade linux-image-generic-64k-hwe-26.04Upgrade linux-image-ibm-7.0Upgrade linux-image-7.0.0-1003-gke-64kUpgrade linux-image-7.0.0-1008-gcpUpgrade linux-image-7.0.0-1008-oracle-64kUpgrade linux-image-7.0.0-1010-azure | Jul 20, 2026 | Jun 24, 2026 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Jul 6, 2026 | Jun 24, 2026 |
Prioritise with Active Threat Intelligence
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub