Linux kernel CVEs flood embedded device scans because, since February 2024, the kernel project assigns its own CVE IDs and gives one to nearly every bug fix that reaches a stable kernel. That adds up to thousands a year, and most of them touch code a given device never builds. To handle them, triage each CVE against three facts from the firmware image: the kernel version and branch, the CONFIG_* options it was built with, and the drivers that are actually reachable on the hardware. Then fix what remains by moving to the latest longterm or CIP SLTS release.
Key takeaways
- Linux kernel CVEs flood embedded device scans because, since February 2024, the kernel project assigns its own CVE IDs and gives one to nearly every bug fix that reaches a stable kernel.
- Because the kernel became its own CVE Numbering Authority (CNA) and decided to treat almost every bug fix as a potential vulnerability.
- More than a typical CVE record does, and the extra fields are what make triage possible.
- Version. On a vendor board-support kernel the version string alone can mislead, because the SoC vendor may have applied hundreds of its own patches and sometimes upstream fixes as well.
Why does the Linux kernel publish thousands of CVEs a year?
Because the kernel became its own CVE Numbering Authority (CNA) and decided to treat almost every bug fix as a potential vulnerability. Greg Kroah-Hartman announced on 13 February 2024 that Linux is a CNA, so that, as with curl, no other group can assign CVEs against the project without its involvement. The kernel's CVE process documentation explains the volume. Due to the layer the kernel sits at, "almost any bug might be exploitable to compromise the security of the kernel," and the exploit potential is often unclear when the bug is fixed, so "the CVE assignment team is overly cautious and assign CVE numbers to any bugfix that they identify."
The same page sets the rules a device maker has to work with:
- CVEs are assigned automatically "as part of the normal stable release process," and only after a fix is available and applied to a stable kernel tree. Each one is tracked by the git commit ID of the original fix.
- No CVE is assigned for an issue in a kernel version the Stable/LTS team does not actively support. Bugs in a distribution's or vendor's own kernel have to go to that distribution.
- Deciding whether a CVE applies is the user's job: "we do not know your use case, and we do not know what portions of the kernel that you use."
The resulting volume is large. Counted through the NVD API on 2026-11-11, CVE records whose source is the kernel CNA and that are not rejected number about 4,290 published in 2024 and about 5,680 published in 2025. For comparison, CISA's KEV catalog (version 2026.11.10) lists 32 Linux kernel entries in total, from every year and every assigner. A firmware scan that matches only the kernel version will therefore report hundreds or thousands of kernel CVEs against a single image, and nearly all of the triage work is deciding which ones describe code that is really there and reachable. The broader CNA rules behind this are covered in our CVE Numbering Authority rules guide.
What does a kernel CNA CVE record tell a device maker?
More than a typical CVE record does, and the extra fields are what make triage possible. Records from the kernel CNA, published on the CVE Program site and announced on the linux-cve-announce list, list the source files the fix changed (programFiles), the git commit ranges affected, and a per-branch version range. The CVE-2024-53104 record, an out-of-bounds write in the USB Video Class webcam driver, is a good example:
| Field in the record | Value for CVE-2024-53104 | What it answers |
|---|---|---|
| Title | media: uvcvideo: Skip parsing frames of type UVC_VS_UNDEFINED in uvc_parse_format | Which subsystem and driver |
| Program file | drivers/media/usb/uvc/uvc_driver.c |
Which source file, so which CONFIG_* option |
| Affected from | 2.6.26 | How old the bug is |
| Unaffected per branch | 4.19.324, 5.4.286, 5.10.230, 5.15.172, 6.1.117, 6.6.61, 6.11.8, 6.12.1, and 6.13 onward | First fixed release on each stable branch |
| CISA KEV | Added 2025-02-05, "could allow for physical escalation of privilege" | Evidence of exploitation in the wild |
The per-branch list matters because each stable branch gets its own fixed release. A 6.1.120 kernel is fixed, even though it is numerically far below 6.13, and a scanner that compares every kernel with the mainline fix release will flag it wrongly. Downstream kernels add another layer. Debian's security tracker for CVE-2024-53104 records the fix for its bullseye 5.10 package in 5.10.234-1 (advisory DLA-4075-1), not at the upstream 5.10.230. So a fixed version always has to be read against the kernel tree the product actually ships.
How do you triage kernel CVEs against a firmware image?
Work from coarse to fine, so each step removes CVEs before the next, more expensive step:
| Step | Question | Where the evidence comes from |
|---|---|---|
| 1. Version and branch | Which longterm branch and release is this kernel, and is it a vendor or distribution fork? | The Linux version x.y.z banner string in the kernel image, package records, or the build system |
| 2. Configuration | Is the code named in the CVE compiled in, or built as a module? | The kernel .config from the build, or embedded in the image |
| 3. Shipped modules | If it is a module, is the .ko file present in the root filesystem, and is it loaded? |
/lib/modules/<version>/ in the unpacked image |
| 4. Reachability | Can an attacker reach the code on this hardware: network, USB port, local user, or none? | Product design, exposed interfaces, threat model |
| 5. Exploitation signal | Is it KEV-listed, and how high is its EPSS score? | CISA KEV and FIRST EPSS data |
Version. On a vendor board-support kernel the version string alone can mislead, because the SoC vendor may have applied hundreds of its own patches and sometimes upstream fixes as well. The kernel.org releases page states that kernel developers "can provide no support" for distribution kernels, and that anything after the dash in uname -r marks one.
Configuration. The build's .config is the best evidence. If only the image is available, the kernel's init/Kconfig describes CONFIG_IKCONFIG as saving the complete .config inside the kernel, extractable "with the script scripts/extract-ikconfig" or, with CONFIG_IKCONFIG_PROC, readable at /proc/config.gz on a running device. Yocto Project builds can record it in the SBOM through SPDX_INCLUDE_KERNEL_CONFIG, as our Yocto and Buildroot SBOM guide explains.
Mapping a file to an option. Each kernel directory's Makefile ties object files to a Kconfig symbol. For CVE-2024-53104, drivers/media/usb/uvc/Makefile builds uvc_driver.o into uvcvideo and has the line obj-$(CONFIG_USB_VIDEO_CLASS) += uvcvideo.o. A smart meter or industrial gateway built without CONFIG_USB_VIDEO_CLASS does not contain the vulnerable code at all. The same reasoning applies to the other KEV-listed USB bug, CVE-2024-53197 in sound/usb/quirks.c, which is built only with CONFIG_SND_USB_AUDIO.
Recording the result. A CVE ruled out at step 2 or 3 is a VEX statement of "not affected" with the justification that the vulnerable code is not present, and the config line is the evidence. Our CSAF and VEX for device makers guide covers how to publish that to customers. Re-run the mapping when the .config changes. A new feature that enables one option can bring a whole subsystem's CVEs back into scope.
Which kernel CVEs should a device maker fix first?
After config triage, the list is usually short enough to rank by real-world signal. Start with anything in CISA's Known Exploited Vulnerabilities catalog. With 32 kernel entries it is a short list to check by hand, and several are directly relevant to devices. CVE-2024-53104 (UVC) and CVE-2024-53197 (USB audio) were both added in early 2025; CISA's entry for CVE-2024-53197 describes an attacker "with physical access to the system" using "a malicious USB device". Both sit in USB drivers that parse data supplied by an attached device, so they matter on any product with an exposed USB host port, and not at all on one built without those drivers.
Next, rank the rest by reachability rather than by CVSS alone:
Network-reachable code that is enabledProtocol stacks, wireless drivers and netfilter code that parses traffic from outside the device. Physical interfaces a user or attacker can touchUSB, Bluetooth, SD card and other removable-media drivers, especially on unattended field equipment. Local privilege escalation, where the device runs third-party applications, containers or customer scripts, so an unprivileged local user exists at all. On a single-purpose appliance whose processes all run as root, this class matters less.
FIRST EPSS scores help order large groups within each tier. Our KEV and EPSS prioritisation guide explains how to combine the two.
How do you fix kernel CVEs: stable updates, CIP SLTS or backports?
Move to the latest release of a longterm branch, and keep moving. The kernel's CVE documentation is direct: "it is best to take all released kernel changes, as they are tested together in a unified whole," not cherry-picked fixes, and it warns that some relevant changes carry no CVE at all. The stable kernel rules explain why those updates are low-risk. A stable patch "must already exist in Linux mainline," must be "obviously correct and tested," and cannot be bigger than 100 lines with context. As of the kernel.org releases page read on 2026-11-11, the longterm branches and their projected end of life are:
| Longterm branch | Released | Projected EOL (kernel.org) | CIP SLTS support (CIP Kernel WG) |
|---|---|---|---|
| 6.18 | 2025-11-30 | Dec 2028 | — |
| 6.12 | 2024-11-17 | Dec 2028 | 6.12-cip, until 2035 |
| 6.6 | 2023-10-29 | Dec 2027 | — |
| 6.1 | 2022-12-11 | Dec 2027 | 6.1-cip, until 2033 |
| 5.15 | 2021-10-31 | Dec 2026 | — |
| 5.10 | 2020-12-13 | Dec 2026 | 5.10.y, until 2031 |
Two branches common in shipped devices, 5.10 and 5.15, reach their projected kernel.org end of life in December 2026. Once that happens, the kernel CNA stops assigning CVEs for them, and that is no sign that they have stopped having bugs.
Use CIP SLTS for long-lived products. The Civil Infrastructure Platform provides Super-Long-Term Stable kernels "with a maintenance period of ten years," starting from the standard LTS kernels and allowing some hardware-support backports. Its Kernel Working Group's ten-year review lists the supported series in the table above, plus 4.4.y (until 2027) and 4.19.y (until 2029). These two are kept on a self-maintenance model "limiting them to a subset of architectures and member-provided configurations." The same post describes the group's cip-kernel-sec CVE tracking and a kernel-cve-triage tool "to identify CVEs affecting specific kernel configurations", the same config-based triage described above. Check that your SoC and configuration fall within CIP's supported scope before relying on it.
Backport only when you cannot rebase. A SoC vendor's board-support kernel pinned to an old release is the usual reason. Take the upstream fix commit named in the CVE record, plus any follow-up fixes to the same code, and run the full test suite. Record each backport against its CVE, because a version-only scanner will still flag the kernel as affected. Over time, the cheaper path is to push the board support upstream or onto a longterm branch.
Disable what the product does not use. The kernel's self-protection documentation calls attack surface reduction "the most fundamental defense against security exploits." For an embedded image, the practical form is a minimal .config. Each unused filesystem, protocol family, USB class driver or debug interface that is turned off removes a whole stream of CVEs from scope. Limiting attack surfaces is also one of the essential requirements in the EU Cyber Resilience Act, covered in our CRA Annex I guide. The kernel is only one of the open-source components in an image that need this treatment. See our BusyBox vulnerabilities guide and U-Boot bootloader security guide for the components next to it, and firmware OTA update security for getting the fixed kernel onto devices in the field.
AI-assisted analysis: what SoftWSP actually runs
SoftWSP's automated scan unpacks a firmware image and catalogs the software components in it. Where the image's package records list the kernel, for example the opkg kernel package on OpenWrt-based firmware, it identifies the component as the Linux kernel with its version, strips the package revision so the upstream version can be matched, and matches that version against CVE records, CISA's KEV catalog and FIRST's EPSS scores. This is deterministic code: the code scores, and AI narrates.
AI's part is the written explanation on top of that matching. It summarises which kernel CVEs matched the version, which ones are KEV-listed or have a high EPSS score, and what the version evidence was, and every sentence cites the component, version and record it relies on. An engineer reviews every finding before the report is delivered. The steps this guide describes as manual stay with that engineer: reading the kernel .config, mapping each CVE's source files to CONFIG_* options, checking which modules ship, and judging whether a driver is reachable on the hardware. A version-only match also flags CVEs that a vendor backport has already closed, and that judgement stays with the engineer too. Our firmware SBOM guide covers how the component inventory itself is built.
For where kernel review fits in a full assessment, see the OWASP Firmware Security Testing Methodology guide, or device & firmware security services to have a specific image reviewed.
This guide draws on the Linux kernel's CVE, stable-release and self-protection documentation, Greg Kroah-Hartman's CNA announcement, the kernel.org releases page, the Civil Infrastructure Platform's SLTS pages, CVE Program records for CVE-2024-53104 and CVE-2024-53197, the Debian Security Tracker, kernel source Makefiles and Kconfig, NVD API counts by source and CISA's KEV catalog (version 2026.11.10), all read directly on 2026-11-11.
Put this guide to work
Frequently asked questions
Why does the Linux kernel get thousands of CVEs a year?
Since February 2024 the Linux kernel project has been its own CVE Numbering Authority, and its published process says that because almost any kernel bug might be exploitable, the assignment team is "overly cautious and assign CVE numbers to any bugfix that they identify." CVEs are assigned automatically as part of the stable release process, once a fix is in a stable tree. Counted through the NVD API on 2026-11-11, records from the kernel CNA that are not rejected number about 4,290 for 2024 and about 5,680 for 2025. The kernel documentation also says plainly that, because any one system uses only a small subset of the source tree, large numbers of these CVEs are not relevant for a given system.
How do I tell whether a kernel CVE affects my firmware image?
Check three things in order. First, the kernel version and branch: the kernel CNA's CVE record lists, per stable branch, the first release that is unaffected, such as 5.10.230 or 6.1.117 for CVE-2024-53104. Second, the configuration: the record names the source files the fix touched, and the kernel Makefile in that directory shows which CONFIG_ option builds them; if that option is unset in the image's .config, the code is not in the image. Third, reachability: a USB driver bug needs a USB port the attacker can reach, and a network protocol bug needs that protocol enabled and exposed. A CVE that fails the second test can be documented as not affected, with the config evidence.
Should a device maker cherry-pick kernel CVE fixes or update to the newest stable release?
The kernel's own CVE documentation recommends taking all released kernel changes, because they are tested together, and warns that many problems are solved by several fixes on top of each other, some of which carry no CVE. In practice that means rebasing the product kernel onto the latest release of its longterm branch on a regular schedule. Individual backports are the fallback when a vendor board-support kernel cannot be rebased, and each one then needs its own testing and a record in the SBOM or VEX data of which CVE it closes.
What is the CIP SLTS kernel, and when should an embedded product use it?
The Civil Infrastructure Platform, a Linux Foundation project, maintains Super-Long-Term Stable (SLTS) kernels that start from kernel.org longterm branches and aim for at least ten years of support. Its Kernel Working Group lists linux-4.4.y supported until 2027, 4.19.y until 2029, 5.10.y until 2031, 6.1-cip until 2033 and 6.12-cip until 2035, compared with kernel.org projected end-of-life dates of December 2026 for 5.10 and 5.15. SLTS suits products with long field lives, such as industrial control, rail and energy equipment, whose hardware and configuration fall within the scope CIP members support.
Does SoftWSP check which kernel drivers and CONFIG options are enabled in my firmware?
No. SoftWSP's automated scan identifies the Linux kernel as a component, with its version, where the image's package records list it (for example the opkg kernel package on OpenWrt-based firmware), and matches that version against CVE, CISA KEV and FIRST EPSS data. AI then writes a plain-language summary that cites the component, version and record behind every finding, and an engineer reviews it. Reading the kernel configuration, mapping each CVE's source files to CONFIG_ options and judging whether a driver is reachable on the hardware is engineer work, as this guide describes.
Sources
- Linux kernel documentation: CVEs (process/cve)
- Greg Kroah-Hartman: Linux is a CNA (13 February 2024)
- The Linux Kernel Archives: Active kernel releases (longterm release table)
- Linux kernel documentation: Everything you ever wanted to know about Linux -stable releases
- Linux kernel documentation: Kernel Self-Protection (attack surface reduction)
- Civil Infrastructure Platform: Linux Kernel & Core Packages (SLTS kernels)
- Civil Infrastructure Platform: A Decade of Stability, 10 Years of the CIP Kernel WG (6 August 2026)
- CVE Program: CVE-2024-53104 record (assigner: Linux)
- CVE Program: CVE-2024-53197 record (assigner: Linux)
- Debian Security Tracker: CVE-2024-53104 (linux)
- Linux kernel source: drivers/media/usb/uvc/Makefile
- Linux kernel source: init/Kconfig (IKCONFIG, IKCONFIG_PROC)
- CISA: Known Exploited Vulnerabilities (KEV) Catalog
About this guide
SoftWSP Firmware Security Desk
Covers the Firmware vulnerabilities & fixes cluster: 108 guides.

In this cluster
Questions about this page?
