CVE-2024-46828·Kernel vulnerability
In the Linux kernel, the following vulnerability has been resolved: sched: sch_cake: fix bulk flow accounting logic for host fairness In sch_cake, we keep track of the count of active bulk flows per host, when running in dst/src host fairness mode, which is used as the round-robin weight when iterating through flows. The count of active bulk flows is updated whenever a flow changes state. This has a peculiar interaction with the hash collision handling: when a hash collision occurs (after the set-associative hashing), the state of the hash bucket is simply updated to match the new packet that collided, and if host fairness is enabled, that also means assigning new per-host state to the flow. For this reason, the bulk flow counters of the host(s) assigned to the flow are decremented, before new state is assigned (and the counters, which may not belong to the same host anymore, are incremented again). Back when this code was introduced, the host fairness mode was always enabled, so the decrement was unconditional. When the configuration flags were introduced the *increment* was made conditional, but the *decrement* was not. Which of course can lead to a spurious decrement (and associated wrap-around to U16_MAX). AFAICT, when host fairness is disabled, the decrement and wrap-around happens as soon as a hash collision occurs (which is not that common in itself, due to the set-associative hashing). However, in most cases this is harmless, as the value is only used when host fairness mode is enabled. So in order to trigger an array overflow, sch_cake has to first be configured with host fairness disabled, and while running in this mode, a hash collision has to occur to cause the overflow. Then, the qdisc has to be reconfigured to enable host fairness, which leads to the array out-of-bounds because the wrapped-around value is retained and used as an array index. It seems that syzbot managed to trigger this, which is quite impressive in its own right. This patch fixes the issue by introducing the same conditional check on decrement as is used on increment. The original bug predates the upstreaming of cake, but the commit listed in the Fixes tag touched that code, meaning that this patch won't apply before that.
- Severity
- high
- Software
- Kernel
- Fixed in
- 6.10.10
- Published
How likely is exploitation
FIRST's Exploit Prediction Scoring System puts the probability of this CVE being exploited in the next 30 days at <0.1% — higher than 3% of all published CVEs. EPSS is an independent forecast of exploitation, not a severity rating: it says nothing about how much damage a successful attack does, which is what a CVSS score measures.
Read the two together. CVE-2024-46828 scores 7.8 on CVSS, so a successful attack would be serious — but at <0.1%, almost nobody is currently attempting it. That is a different situation from a flaw under mass exploitation, and it is usually the difference between patching on your next maintenance window and patching tonight.
Affected versions
From: 6.10
Until: 6.10.10
Fixed in: 6.10.10
How to fix this CVE
Update your Linux kernel to version 6.10.10 or later to patch the bulk flow accounting logic flaw in the sch_cake qdisc scheduler. This vulnerability can cause memory corruption when host fairness mode transitions occur after hash collisions in the network scheduler. Apply the kernel update through your distribution's package manager and reboot the system to activate the patched kernel.
sudo dnf update kernel kernel-devel && sudo rebootDefensia detects this vulnerability
How to check if you are affected
- Check current kernel version: uname -r | grep -E '^6\.10\.[0-9]' to identify if you are running an affected 6.10.x kernel
- Verify if sch_cake qdisc is loaded: lsmod | grep sch_cake to confirm the vulnerable scheduler module is in use
- Check if host fairness mode is configured: tc qdisc show | grep -i cake and tc class show to inspect cake qdisc parameters for host fairness settings
- Verify the patch is applied after update: uname -r should show version 6.10.10 or higher, and grep -i 'sch_cake' /boot/config-$(uname -r) should confirm the module is properly rebuilt
FAQ
What is CVE-2024-46828?
CVE-2024-46828 is a memory corruption vulnerability in the Linux kernel's sch_cake network scheduler that occurs when the bulk flow accounting counters are not properly decremented during hash collisions, causing integer wrap-around and potential out-of-bounds array access when host fairness mode is later enabled.
Is CVE-2024-46828 being actively exploited?
No, CVE-2024-46828 is not listed on the CISA Known Exploited Vulnerabilities (KEV) catalog and there are no public exploits available. However, it was discovered through fuzzing (syzbot), indicating it requires specific conditions to trigger.
What versions of Kernel are affected by CVE-2024-46828?
Linux kernel versions 6.10 through 6.10.10 are affected. The vulnerability has been patched in kernel version 6.10.10 and later.
How do I check if my server is vulnerable to CVE-2024-46828?
Run 'uname -r' and check if the output shows a version between 6.10 and 6.10.9. If it does, and if sch_cake is loaded (verify with 'lsmod | grep sch_cake'), your system is vulnerable.
Does Defensia detect CVE-2024-46828?
Yes — Defensia's CVE advisory scanner compares installed package versions against the NVD database. If the Linux kernel is installed on a monitored server, CVE-2024-46828 will appear in your dashboard with remediation steps.
Related Kernel CVEs
References
- https://git.kernel.org/stable/c/4a4eeefa514db570be025ab46d779af180e2c9bb
- https://git.kernel.org/stable/c/546ea84d07e3e324644025e2aae2d12ea4c5896e
- https://git.kernel.org/stable/c/549e407569e08459d16122341d332cb508024094
- https://git.kernel.org/stable/c/7725152b54d295b7da5e34c2f419539b30d017bd
- https://git.kernel.org/stable/c/cde71a5677971f4f1b69b25e854891dbe78066a4
Track CVEs across your fleet automatically
Defensia scans your Linux servers and tells you exactly which ones are running vulnerable versions — including CVE-2024-46828. Free for 1 server.
Get started free