FR
live
Linux High CVSS 8.6

The Linux kernel shipped 227 CVEs in one week and left four flaws unfixed on older branches

Between 23 and 29 August 2026, the Linux project published 227 CVEs, five times a normal week, as a full stable cycle landed on 28 August across all eight active branches. Update to the latest release on your branch, but track the four flaws that no stable fix covers separately.

A dark silicon wafer covered in identical chips, a single chip marked with an amber dot.

28 August 2026. Greg Kroah-Hartman ships eight stable kernels at once. 23–29 August 2026. The Linux project issues 227 CVEs, roughly five times an ordinary week. 16 August 2026. The 7.2 branch leaves mainline and already receives its second point release. The news is not a spectacular bug: it is a step change in how the kernel publishes vulnerabilities — and in how teams must handle them.

Why 227 CVEs landed at once

The number looks alarming; the cause is administrative, not technical. The identifiers tell the story: 21 CVEs sit in the CVE-2026-747xx block, the other 206 in the CVE-2026-805xx through 807xx block. On 28 August, the project cut a point release on every active branch at the same time, and the records for everything in those releases were published together.

The previous week, the same tracker listed six CVEs. The jump to 227 does not mark a collapse in kernel quality — it reflects the rhythm of a full stable cycle. Most of the fixes are narrow: a buffer overflow here, a missing validation there. Few of them look anything alike, and almost all of them shipped in the kernels released that same day.

Two caveats matter before anyone panics. First, none of the 227 is reported as exploited, and no public exploit had been found at the time of writing. Second, NVD has not finished analysing the batch: the CVSS scores quoted here are the kernel CNA’s own, carried as secondary metrics. Other vendors and enrichment databases will publish different figures. Prioritise by reachability and deployment context, not by the score alone.

CVE-2026-80590, the flaw that set every branch target

A single record, CVE-2026-80590, sets the target on all eight stable branches by itself. The flaw leaves stale GSO state on IPv4 fragments before reassembly: an unprivileged user can mark fragments as GSO and trigger a kernel panic. It is a local denial of service, but one that takes down the entire host.

The telling detail is elsewhere: CVE-2026-80590 is fixed only in the stable branches and names no mainline entry. It is, in practice, the reason this week’s numbers are what they are. Two other records also name no mainline fix: CVE-2026-80724 and CVE-2026-74753.

For administrators the consequence is simple. The eight target versions — 5.10.268, 5.15.219, 6.1.186, 6.6.155, 6.12.107, 6.18.48, 7.1.12 and 7.2.2 — are all the newest release of their branch, and all eight were cut on 28 August. On an upstream kernel the check is binary: if you are not on the latest release of your branch, you are behind.

Four flaws a branch update does not clear

This is the part to read before closing the ticket. Four records mark a branch as affected without naming a fixed version for it. Installing the table target does not remediate them.

  • CVE-2026-74752 (SCTP, CVSS 9.8): introduced in 2.6.24, fixed only in 7.1.10 and mainline 7.2. No fix named for 5.10, 5.15, 6.1, 6.6, 6.12 or 6.18. The widest gap of the week.
  • CVE-2026-80551 (s390 vfio-ccw, CVSS 9.3): introduced in 5.3, fixed in 6.6.154 and later. No fix for 5.10, 5.15 or 6.1.
  • CVE-2026-74743 (macvlan, CVSS 9.8): introduced in 2.6.23, fixed in 6.1.184 and later. No fix for 5.10 or 5.15.
  • CVE-2026-80635 (wcn36xx Wi-Fi): introduced in 4.7, fixed in 6.1.178 and later. No fix for 5.10 or 5.15.

Add last week’s CVE-2026-74582, still unfixed on 5.10, 5.15 and 6.1. A team shipping one of the older LTS branches now has five items to track separately from the branch bump.

The pattern is telling: the older the branch, the more flaws the stable flow no longer catches up on. That is not negligence — it is the cost of an end-of-life branch, where every backport grows more expensive to produce.

How to triage 227 CVEs without losing a week

The method is three steps, in order.

  • Check the version. uname -r, then compare against the target for your branch. Everything is already out: nothing waits on a future release.
  • Confirm the feature is built and reachable. Every bug is gated by a config option: CONFIG_IP_SCTP, CONFIG_MACVLAN, CONFIG_WCN36XX, CONFIG_VFIO_CCW, CONFIG_MAC80211, and so on. A symbol set to m is still present and loadable, not absent.
  • Ship the right kernel. Apply the newest upstream release of your branch, or a verified vendor backport equivalent to the target.
bash
# Current kernel version
uname -r

# Is the vulnerable feature compiled in or loadable?
grep -E 'CONFIG_(IP_SCTP|MACVLAN|WCN36XX|VFIO_CCW)' /boot/config-$(uname -r)

On a vendor or BSP kernel the version does not compare cleanly with the table. A kernel reporting 5.10.110-rk3588 is based on 5.10.110 and will never become 5.10.268 through an upstream update. For those products the table tells you which fixes must be present, not which release to install. Ask the silicon vendor, and treat a verified backport as equivalent to the target.

What this volume changes for maintenance

This is not the first time the kernel has shipped a large batch, but the scale changes the practice. A team that still tracked CVEs one by one — reading the record, judging whether it applies, hunting for the commit — drowns at 227 in a week. The stable-branch model offers a mechanical answer: for the vast majority of flaws, the fix is already in the newest point release of the branch. Updating the version therefore clears the batch at once, with no manual backport.

The corollary matters just as much. If a team cannot update — a locked kernel, a certification, a vendor BSP — the volume becomes unmanageable, because every individual backport is a porting and validation effort of its own. That is where the four unfixed flaws change nature: on an old LTS, the branch update does not cover them, and you must decide, one by one, whether the risk justifies a backport the stable flow never shipped. The real cost of maintaining an end-of-life branch is no longer the fix — it is the triage.

The good news is that the kernel made the tracking transparent: records are published on the linux-cve-announce list, readable on lore.kernel.org, and every stable release documents the fixes it carries. The information is there; what teams still lack is the reflex to patch by branch version rather than by CVE.

Verdict

If you run a recent upstream kernel, updating to the newest release of your branch settles most of it: all 227 CVEs, including CVE-2026-80590, are already fixed in the eight targets published on 28 August. Do it before your next maintenance window and the bulk of the batch is done.

If you ship an older LTS branch — 5.10, 5.15 or 6.1 — or a vendor BSP kernel, the update is not enough: four flaws from this week, plus one from last, remain unfixed. Track them explicitly, quantify the residual risk, and ask your vendor the real question: is the branch still worth maintaining, or is it time to plan a move to a newer LTS?

References

cve

Linked vulnerabilities

CVE-2026-80590In the Linux kernel, the following vulnerability has been resolved: inet: frags: strip GSO state from fragments before reassembly A virtio_net_hdr (tun/tap, or AF_PACKET with PACKET_VNET_HDR) can mark an IPv4 or IPv6 fragment as GSO; nothing relates gso_type to frag_off. inet_frag_reasm_prepare()/inet_frag_reasm_finish() keep the first fragment's skb as the head of the reassembled datagram, including its shinfo->gso_size/gso_type/gso_segs, and chain the remaining fragments on frag_list with whatever linear/paged layout they arrived with. After ip_defrag() (ip_local_deliver(), nf_defrag_ipv4, ...) the reassembled skb therefore still claims to be GSO (SKB_GSO_DODGY), and the next software segmentation point - udp_rcv_segment() on local delivery, validate_xmit_skb(), or the ip_finish_output_gso() slow path - hands it to skb_segment(). skb_segment()'s frag_list walk assumes GRO-shaped input and hits one of its BUG_ON()s. Two writes to a tap by an unprivileged user in its own userns are enough: kernel BUG at net/core/skbuff.c:4899! Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI CPU: 0 UID: 1000 PID: 82 Comm: poc Not tainted 7.2.0-pentest+ #2 RIP: 0010:skb_segment+0x20ca/0x48b0 Call Trace: <TASK> __udp_gso_segment+0x29a/0x27d0 udp4_ufo_fragment+0x458/0x6c0 inet_gso_segment+0x429/0x1340 skb_mac_gso_segment+0x233/0x4f0 __skb_gso_segment+0x308/0x660 udp_queue_rcv_skb+0x440/0xad0 udp_unicast_rcv_skb+0xc7/0x2c0 udp_rcv+0x16ce/0x2260 ip_protocol_deliver_rcu+0x197/0x2d0 ip_local_deliver+0x430/0x690 ip_rcv+0x16f/0x1f0 __netif_receive_skb_one_core+0x15e/0x1c0 __netif_receive_skb+0x1e/0x110 netif_receive_skb+0xf6/0x5c0 tun_rx_batched.isra.0+0x3ab/0x790 tun_get_user+0x17c3/0x3550 tun_chr_write_iter+0xba/0x1b0 vfs_write+0x646/0x1130 </TASK> Kernel panic - not syncing: Fatal exception in interrupt This runs with BH disabled, so it is a panic rather than an oops. The same is reachable with CAP_NET_RAW in a netns where a defrag point precedes a GSO point, and from a guest whose VMM forwards virtio_net_hdr to a tap. The SKB_GSO_DODGY frag_list checks added by commit 3dcbdb134f32 ("net: gso: Fix skb_segment splat when splitting gso_size mangled skb having linear-headed frag_list") and by commit 9e4b7a99a03a ("net: gso: fix panic on frag_list with mixed head alloc types") do not cover it: page-backed heads skip them, and kmalloc heads skip them when gso_size == skb_headlen(head), which the sender controls. An skb entering a frag queue is an IP fragment by definition and cannot legitimately carry GSO state: GRO does not merge fragments and the stack segments before it fragments, so only untrusted sources are affected. This has been reachable since commit f43798c27684 ("tun: Allow GSO using virtio_net_hdr"), the first path that let userspace attach GSO metadata to an IP fragment. Reset the GSO fields of every fragment as it is queued, in inet_frag_queue_insert(), which IPv4, IPv6, nf_conntrack_reasm and 6lowpan reassembly share; then neither the head nor the frag_list members of the reassembled skb carry them (the members matter too: the ip_do_fragment()/ip6_fragment() fast paths send them out as they are). The head may remain CHECKSUM_PARTIAL; that is already accepted on receive and resolved by skb_checksum_help() in ip_do_fragment()/ip6_fragment() on forward. Tested on top of net.git (dc4b95b8fee9), x86_64: the tap reproducer above, two further IPv4 frag_list geometries that reach BUG_ON(i >= nfrags) and BUG_ON(!list_skb->head_frag), and an IPv6 fragment-header variant (udp6_ufo_fragment()) each panic the unpatched kernel; with this patch all four datagrams are delivered intact and nothing is logged. High CVSS 8.6 28/08 CVE-2026-80635In the Linux kernel, the following vulnerability has been resolved: wifi: wcn36xx: fix OOB read from short trigger BA firmware response The firmware response length is only checked against sizeof(*rsp) (20 bytes), but when candidate_cnt >= 1, a 22-byte candidate struct is read at buf + 20 without verifying the response contains it. This causes an out-of-bounds read of stale heap data, corrupting the BA session state. Add validation that the response includes the candidate data. High CVSS 8.8 28/08 CVE-2026-74743In the Linux kernel, the following vulnerability has been resolved: macvlan: inherit needed_headroom and needed_tailroom from lowerdev macvlan devices inherit hard_header_len from lowerdev during macvlan_init(), but leave needed_headroom and needed_tailroom set to 0. When the underlying lowerdev requires extra headroom or tailroom for headers/trailers (e.g. macsec, ipsec, wireguard, tunnels, or veth with rx headroom), upper layers calculating packet headroom and tailroom fail to reserve sufficient space. This can result in reallocation overhead, skb headroom underflows, or KASAN slab-use-after-free crashes when dev_hard_header() / macvlan_hard_header() prepends header data or when lower devices append tailroom. Fix this by: 1. Inheriting needed_headroom and needed_tailroom from lowerdev in macvlan_init(). 2. Propagating needed_headroom and needed_tailroom updates to attached macvlans in macvlan_device_event() when receiving NETDEV_FEAT_CHANGE events. Critical CVSS 9.8 26/08 CVE-2026-74752In the Linux kernel, the following vulnerability has been resolved: sctp: validate cookie AUTH state before use When cookie authentication is disabled, COOKIE_ECHO restores fixed-size AUTH fields directly from peer-controlled cookie bytes. A forged RANDOM length, HMAC list, or CHUNKS list can then reach association consumers with lengths or identifiers that were never validated against the local backing arrays. A forged RANDOM length can cause out-of-bounds reads during key-vector construction. A forged HMAC identifier also caused a 32-byte write past a zero-length AUTH chunk, providing a primitive for a local privilege escalation chain. Validate the cookie's RANDOM, HMACS, and CHUNKS parameters at the cookie trust boundary before copying them into the association. Reject invalid types, malformed lengths, unsupported HMAC identifiers, HMAC lists without SHA1, and forbidden chunk ids. Critical CVSS 9.8 26/08 CVE-2026-80551In the Linux kernel, the following vulnerability has been resolved: s390/vfio_ccw: Ensure first IDAW remains constant The first IDAW in a list does not need to be on a 2K/4K boundary like all others, and so is read separately to accurately calculate the size of the buffer needed to read the full IDAL. Verify that the address found in the first IDAW is unchanged between reads, to ensure a consistent set of IDAWs being worked with. Critical CVSS 9.3 26/08

The cyber brief, every Tuesday

The flaws that matter and the patches to apply, in a ten-minute read.

No spam. One-click unsubscribe.
read next

On the same topic

Toolpak wants to do for developer tools what Flatpak did for apps

On 26 September 2026, GNOME developer Jordan Petridis introduced Toolpak, a Flatpak-inspired format for shipping strace, ripgrep, and qemu on image-based systems without breaking them. For anyone working on Silverblue or GNOME OS, it fills the gap immutable distributions never closed.

← Back to the feed

Type at least two characters.

↑ ↓ navigate ↵ open esc dismiss