{
    "summary": {
        "snap": {
            "added": [],
            "removed": [],
            "diff": [
                "lxd"
            ]
        },
        "deb": {
            "added": [
                "linux-headers-6.8.0-137-generic",
                "linux-image-6.8.0-137-generic",
                "linux-modules-6.8.0-137-generic",
                "linux-riscv-6.8-headers-6.8.0-137"
            ],
            "removed": [
                "linux-headers-6.8.0-136-generic",
                "linux-image-6.8.0-136-generic",
                "linux-modules-6.8.0-136-generic",
                "linux-riscv-6.8-headers-6.8.0-136"
            ],
            "diff": [
                "linux-headers-generic",
                "linux-headers-virtual",
                "linux-image-virtual",
                "linux-virtual",
                "wireless-regdb"
            ]
        }
    },
    "diff": {
        "deb": [
            {
                "name": "linux-headers-generic",
                "from_version": {
                    "source_package_name": "linux-meta-riscv-6.8",
                    "source_package_version": "6.8.0.136.136~22.04.2",
                    "version": "6.8.0.136.136~22.04.2"
                },
                "to_version": {
                    "source_package_name": "linux-meta-riscv-6.8",
                    "source_package_version": "6.8.0.137.137~22.04.1",
                    "version": "6.8.0.137.137~22.04.1"
                },
                "cves": [],
                "launchpad_bugs_fixed": [],
                "changes": [
                    {
                        "cves": [],
                        "log": [
                            "",
                            "  * Bump ABI 6.8.0-137.137~22.04",
                            ""
                        ],
                        "package": "linux-meta-riscv-6.8",
                        "version": "6.8.0.137.137~22.04.1",
                        "urgency": "medium",
                        "distributions": "jammy",
                        "launchpad_bugs_fixed": [],
                        "author": "Alessio Faina <alessio.faina@canonical.com>",
                        "date": "Wed, 22 Jul 2026 11:02:04 +0200"
                    }
                ],
                "notes": null,
                "is_version_downgrade": false
            },
            {
                "name": "linux-headers-virtual",
                "from_version": {
                    "source_package_name": "linux-meta-riscv-6.8",
                    "source_package_version": "6.8.0.136.136~22.04.2",
                    "version": "6.8.0.136.136~22.04.2"
                },
                "to_version": {
                    "source_package_name": "linux-meta-riscv-6.8",
                    "source_package_version": "6.8.0.137.137~22.04.1",
                    "version": "6.8.0.137.137~22.04.1"
                },
                "cves": [],
                "launchpad_bugs_fixed": [],
                "changes": [
                    {
                        "cves": [],
                        "log": [
                            "",
                            "  * Bump ABI 6.8.0-137.137~22.04",
                            ""
                        ],
                        "package": "linux-meta-riscv-6.8",
                        "version": "6.8.0.137.137~22.04.1",
                        "urgency": "medium",
                        "distributions": "jammy",
                        "launchpad_bugs_fixed": [],
                        "author": "Alessio Faina <alessio.faina@canonical.com>",
                        "date": "Wed, 22 Jul 2026 11:02:04 +0200"
                    }
                ],
                "notes": null,
                "is_version_downgrade": false
            },
            {
                "name": "linux-image-virtual",
                "from_version": {
                    "source_package_name": "linux-meta-riscv-6.8",
                    "source_package_version": "6.8.0.136.136~22.04.2",
                    "version": "6.8.0.136.136~22.04.2"
                },
                "to_version": {
                    "source_package_name": "linux-meta-riscv-6.8",
                    "source_package_version": "6.8.0.137.137~22.04.1",
                    "version": "6.8.0.137.137~22.04.1"
                },
                "cves": [],
                "launchpad_bugs_fixed": [],
                "changes": [
                    {
                        "cves": [],
                        "log": [
                            "",
                            "  * Bump ABI 6.8.0-137.137~22.04",
                            ""
                        ],
                        "package": "linux-meta-riscv-6.8",
                        "version": "6.8.0.137.137~22.04.1",
                        "urgency": "medium",
                        "distributions": "jammy",
                        "launchpad_bugs_fixed": [],
                        "author": "Alessio Faina <alessio.faina@canonical.com>",
                        "date": "Wed, 22 Jul 2026 11:02:04 +0200"
                    }
                ],
                "notes": null,
                "is_version_downgrade": false
            },
            {
                "name": "linux-virtual",
                "from_version": {
                    "source_package_name": "linux-meta-riscv-6.8",
                    "source_package_version": "6.8.0.136.136~22.04.2",
                    "version": "6.8.0.136.136~22.04.2"
                },
                "to_version": {
                    "source_package_name": "linux-meta-riscv-6.8",
                    "source_package_version": "6.8.0.137.137~22.04.1",
                    "version": "6.8.0.137.137~22.04.1"
                },
                "cves": [],
                "launchpad_bugs_fixed": [],
                "changes": [
                    {
                        "cves": [],
                        "log": [
                            "",
                            "  * Bump ABI 6.8.0-137.137~22.04",
                            ""
                        ],
                        "package": "linux-meta-riscv-6.8",
                        "version": "6.8.0.137.137~22.04.1",
                        "urgency": "medium",
                        "distributions": "jammy",
                        "launchpad_bugs_fixed": [],
                        "author": "Alessio Faina <alessio.faina@canonical.com>",
                        "date": "Wed, 22 Jul 2026 11:02:04 +0200"
                    }
                ],
                "notes": null,
                "is_version_downgrade": false
            },
            {
                "name": "wireless-regdb",
                "from_version": {
                    "source_package_name": "wireless-regdb",
                    "source_package_version": "2025.10.07-0ubuntu1~22.04.1",
                    "version": "2025.10.07-0ubuntu1~22.04.1"
                },
                "to_version": {
                    "source_package_name": "wireless-regdb",
                    "source_package_version": "2026.02.04-0ubuntu1~22.04.1",
                    "version": "2026.02.04-0ubuntu1~22.04.1"
                },
                "cves": [],
                "launchpad_bugs_fixed": [
                    2144719,
                    2144719
                ],
                "changes": [
                    {
                        "cves": [],
                        "log": [
                            "",
                            "  * Backport to jammy (LP: #2144719)",
                            "    - debian/rules: Continue shipping CRDA regulatory.bin",
                            ""
                        ],
                        "package": "wireless-regdb",
                        "version": "2026.02.04-0ubuntu1~22.04.1",
                        "urgency": "medium",
                        "distributions": "jammy",
                        "launchpad_bugs_fixed": [
                            2144719
                        ],
                        "author": "Noah Wager <noah.wager@canonical.com>",
                        "date": "Tue, 24 Mar 2026 13:14:34 -0700"
                    },
                    {
                        "cves": [],
                        "log": [
                            "",
                            "  * New upstream version 2026.02.04 (LP: #2144719)",
                            ""
                        ],
                        "package": "wireless-regdb",
                        "version": "2026.02.04-0ubuntu1",
                        "urgency": "medium",
                        "distributions": "resolute",
                        "launchpad_bugs_fixed": [
                            2144719
                        ],
                        "author": "Noah Wager <noah.wager@canonical.com>",
                        "date": "Wed, 18 Mar 2026 00:03:10 -0700"
                    }
                ],
                "notes": null,
                "is_version_downgrade": false
            }
        ],
        "snap": [
            {
                "name": "lxd",
                "from_version": {
                    "source_package_name": null,
                    "source_package_version": null,
                    "version": "40126"
                },
                "to_version": {
                    "source_package_name": null,
                    "source_package_version": null,
                    "version": "40388"
                }
            }
        ]
    },
    "added": {
        "deb": [
            {
                "name": "linux-headers-6.8.0-137-generic",
                "from_version": {
                    "source_package_name": "linux-riscv-6.8",
                    "source_package_version": "6.8.0-136.136~22.04.3",
                    "version": null
                },
                "to_version": {
                    "source_package_name": "linux-riscv-6.8",
                    "source_package_version": "6.8.0-137.137~22.04.1",
                    "version": "6.8.0-137.137~22.04.1"
                },
                "cves": [
                    {
                        "cve": "CVE-2026-53225",
                        "url": "https://ubuntu.com/security/CVE-2026-53225",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  sctp: fix uninit-value in __sctp_rcv_asconf_lookup()  __sctp_rcv_asconf_lookup() in net/sctp/input.c only checks that the ASCONF chunk can hold the ADDIP header and a parameter header, then calls af->from_addr_param(), which reads the full address (16 bytes for IPv6) trusting the parameter's declared length.  An unauthenticated peer can send a truncated trailing ASCONF chunk that declares an IPv6 address parameter but stops after the 4-byte parameter header; reached from the no-association lookup path, from_addr_param() then reads uninitialized bytes past the parameter.  Impact: an unauthenticated SCTP peer makes the receive path read up to 16 bytes of uninitialized memory past a truncated ASCONF address parameter.  The sibling __sctp_rcv_init_lookup() bounds parameters with sctp_walk_params(); this path open-codes the fetch and omits the bound. Verify the whole address parameter lies within the chunk before from_addr_param() reads it, the same class of fix as commit 51e5ad549c43 (\"net: sctp: fix KMSAN uninit-value in sctp_inq_pop\").",
                        "cve_priority": "negligible",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53228",
                        "url": "https://ubuntu.com/security/CVE-2026-53228",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  ipv6: sit: reload inner IPv6 header after GSO offloads  ipip6_tunnel_xmit() caches the inner IPv6 header pointer at function entry and continues using it after iptunnel_handle_offloads().  For GSO skbs, iptunnel_handle_offloads() calls skb_header_unclone(). When the skb header is cloned, skb_header_unclone() can call pskb_expand_head(), which may move the skb head. The pskb_expand_head() contract requires pointers into the skb header to be reloaded after the call.  If the later skb_realloc_headroom() branch is not taken, SIT uses the stale iph6 pointer to read the inner hop limit and DS field. That can read from a freed skb head after the old head's remaining clone is released.  Reload iph6 after the offload helper succeeds and before subsequent reads from the inner IPv6 header. Keep the existing reload after skb_realloc_headroom(), since that branch can also replace the skb.",
                        "cve_priority": "medium",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-46242",
                        "url": "https://ubuntu.com/security/CVE-2026-46242",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  eventpoll: fix ep_remove struct eventpoll / struct file UAF  ep_remove() (via ep_remove_file()) cleared file->f_ep under file->f_lock but then kept using @file inside the critical section (is_file_epoll(), hlist_del_rcu() through the head, spin_unlock). A concurrent __fput() taking the eventpoll_release() fastpath in that window observed the transient NULL, skipped eventpoll_release_file() and ran to f_op->release / file_free().  For the epoll-watches-epoll case, f_op->release is ep_eventpoll_release() -> ep_clear_and_put() -> ep_free(), which kfree()s the watched struct eventpoll. Its embedded ->refs hlist_head is exactly where epi->fllink.pprev points, so the subsequent hlist_del_rcu()'s \"*pprev = next\" scribbles into freed kmalloc-192 memory.  In addition, struct file is SLAB_TYPESAFE_BY_RCU, so the slot backing @file could be recycled by alloc_empty_file() -- reinitializing f_lock and f_ep -- while ep_remove() is still nominally inside that lock. The upshot is an attacker-controllable kmem_cache_free() against the wrong slab cache.  Pin @file via epi_fget() at the top of ep_remove() and gate the critical section on the pin succeeding. With the pin held @file cannot reach refcount zero, which holds __fput() off and transitively keeps the watched struct eventpoll alive across the hlist_del_rcu() and the f_lock use, closing both UAFs.  If the pin fails @file has already reached refcount zero and its __fput() is in flight. Because we bailed before clearing f_ep, that path takes the eventpoll_release() slow path into eventpoll_release_file() and blocks on ep->mtx until the waiter side's ep_clear_and_put() drops it. The bailed epi's share of ep->refcount stays intact, so the trailing ep_refcount_dec_and_test() in ep_clear_and_put() cannot free the eventpoll out from under eventpoll_release_file(); the orphaned epi is then cleaned up there.  A successful pin also proves we are not racing eventpoll_release_file() on this epi, so drop the now-redundant re-check of epi->dying under f_lock. The cheap lockless READ_ONCE(epi->dying) fast-path bailout stays.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-05-30 13:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-46331",
                        "url": "https://ubuntu.com/security/CVE-2026-46331",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net/sched: fix pedit partial COW leading to page cache corruption  tcf_pedit_act() computes the COW range for skb_ensure_writable() once before the key loop using tcfp_off_max_hint, but the hint does not account for the runtime header offset added by typed keys. This can leave part of the write region un-COW'd.  Fix by moving skb_ensure_writable() inside the per-key loop where the actual write offset is known, and add overflow checking on the offset arithmetic. For negative offsets (e.g. Ethernet header edits at ingress), use skb_cow() to COW the headroom instead. Guard offset_valid() against INT_MIN, where negation is undefined.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-16 08:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53212",
                        "url": "https://ubuntu.com/security/CVE-2026-53212",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  netfilter: nft_tunnel: fix use-after-free on object destroy  nft_tunnel_obj_destroy() calls metadata_dst_free() which directly kfree()s the metadata_dst, ignoring the dst_entry refcount. Packets that took a reference via dst_hold() in nft_tunnel_obj_eval() and are still queued (e.g. in a netem qdisc) are left with a dangling pointer. When these packets are eventually dequeued, dst_release() operates on freed memory.  Replace metadata_dst_free() with dst_release() so the metadata_dst is freed only after all references are dropped. The dst subsystem already handles metadata_dst cleanup in dst_destroy() when DST_METADATA is set.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53359",
                        "url": "https://ubuntu.com/security/CVE-2026-53359",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  KVM: x86: Fix shadow paging use-after-free due to unexpected role  Commit 0cb2af2ea66ad (\"KVM: x86: Fix shadow paging use-after-free due to unexpected GFN\") fixed a shadow paging mismatch between stored and computed GFNs; the bug could be triggered by changing a PDE mapping from outside the guest, and then deleting a memslot.  The rmap_remove() call would miss entries created after the PDE change because the GFN of the leaf SPTE does not match the GFN of the struct kvm_mmu_page.  A similar hole however remains if the modified PDE points to a non-leaf page.  In this case the gfn can be made to match, but the role does not match: the original large 2MB page creates a kvm_mmu_page with direct=1, while the new 4KB needs a kvm_mmu_page with direct=0.  However, kvm_mmu_get_child_sp() does not compare the role, and therefore reuses the page.  The next step is installing a leaf (4KB) SPTE on the new path which records an rmap entry under the gfn resolved by the walk.  But when that child is zapped its parent kvm_mmu_page has direct=1 and kvm_mmu_page_get_gfn() computes the gfn for the 4KB page as sp->gfn + index instead of using sp->shadowed_translation[] (or sp->gfns[] in older kernels).  It therefore fails to remove the recorded entry.  When the memslot is dropped the shadow page is freed but the rmap entry survives, as in the scenario that was already fixed.  Code that later walks that gfn (dirty logging, MMU notifier invalidation, and so on) dereferences an sptep that lies in the freed page, causing the use-after-free.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-07-04 12:17:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53151",
                        "url": "https://ubuntu.com/security/CVE-2026-53151",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  rxrpc: Fix the ACK parser to extract the SACK table for parsing  Fix modification of the received skbuff in rxrpc_input_soft_acks() and a potential incorrect access of the buffer in a fragmented UDP packet (the packet would probably have to be deliberately pre-generated as fragmented) when AF_RXRPC tries to extract the contents of the SACK table by copying out the contents of the SACK table into a buffer before attempting to parse  AF_RXRPC assumes that it can just call skb_condense() and then validly access the SACK table from skb->data and that it will be a flat buffer - but skb_condense() can silently fail to do anything under some circumstances.  Note that whilst rxrpc_input_soft_acks() should be able to parse extended ACKs, the rest of AF_RXRPC doesn't currently support that.  Further, there's then no need to call skb_condense() in rxrpc_input_ack(), so don't.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-52924",
                        "url": "https://ubuntu.com/security/CVE-2026-52924",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  sctp: purge outqueue on stale COOKIE-ECHO handling  sctp_stream_update() is only invoked when the association is moved into COOKIE_WAIT during association setup/reconfiguration. In this path, the outbound stream scheduler state (stream->out_curr) is expected to be clean, since no user data should have been transmitted yet unless the state machine has already partially progressed.  However, a corner case exists in sctp_sf_do_5_2_6_stale(): when a Stale Cookie ERROR is received, the association is rolled back from COOKIE_ECHOED to COOKIE_WAIT. In this scenario, user data may already have been queued and even bundled with the COOKIE-ECHO chunk.  During the rollback, sctp_stream_update() frees the old stream table and installs a new one, but it does not invalidate stream->out_curr. As a result, out_curr may still point to a freed sctp_stream_out entry from the previous stream state.  Later, SCTP scheduler dequeue paths (FCFS, RR, PRIO, etc.) rely on stream->out_curr->ext, which can lead to use-after-free once the old stream state has been released via sctp_stream_free().  This results in crashes such as (reported by Yuqi):    BUG: KASAN: slab-use-after-free in sctp_sched_fcfs_dequeue+0x13a/0x140   Read of size 8 at addr ff1100004d4d3208 by task mini_poc/9312   CPU: 1 UID: 1001 PID: 9312 Comm: mini_poc Not tainted      7.1.0-rc1-00305-gbd3a4795d574 #5 PREEMPT(full)    sctp_sched_fcfs_dequeue+0x13a/0x140    sctp_outq_flush+0x1603/0x33e0    sctp_do_sm+0x31c9/0x5d30    sctp_assoc_bh_rcv+0x392/0x6f0    sctp_inq_push+0x1db/0x270    sctp_rcv+0x138d/0x3c10  Fix this by fully purging the association outqueue when handling the Stale Cookie case. This ensures all pending transmit and retransmit state is dropped, and any scheduler cached pointers are invalidated, making it safe to rebuild stream state during COOKIE_WAIT restart.  Updating only stream->out_curr would be insufficient, since queued and retransmittable data would still reference the old stream state and trigger later use-after-free in dequeue paths.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-24 08:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53215",
                        "url": "https://ubuntu.com/security/CVE-2026-53215",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net: mvpp2: refill RX buffers before XDP or skb use  The RX error path returns the current descriptor buffer to the hardware BM pool. That is only valid while the driver still owns the buffer.  mvpp2_rx_refill() can fail after the current buffer has been handed to XDP or attached to an skb. In those cases mvpp2_run_xdp() may have recycled, redirected, or queued the page for XDP_TX, and an skb free also retires the data buffer. Returning such a buffer to BM lets hardware DMA into memory that is no longer owned by the RX ring.  Refill the BM pool before handing the current buffer to XDP or to the skb. If the allocation fails there, drop the packet and return the still-owned current buffer to BM, preserving the pool depth. Once the refill succeeds, later local drops retire/free the current buffer instead of returning it to BM.",
                        "cve_priority": "critical",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53176",
                        "url": "https://ubuntu.com/security/CVE-2026-53176",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  IB/isert: Reject login PDUs shorter than ISER_HEADERS_LEN  In drivers/infiniband/ulp/isert/ib_isert.c, isert_login_recv_done() computes the login request payload length as wc->byte_len minus ISER_HEADERS_LEN with no lower bound, and login_req_len is a signed int. A remote iSER initiator can post a login Send work request carrying fewer than ISER_HEADERS_LEN (76) bytes, so the subtraction underflows and login_req_len becomes negative.  isert_rx_login_req() then reads that negative length back into a signed int, takes size = min(rx_buflen, MAX_KEY_VALUE_PAIRS), and because the min() is signed it keeps the negative value; the value is then passed as the memcpy() length and sign-extended to a multi-gigabyte size_t. The copy into the 8192-byte login->req_buf runs far out of bounds and faults, crashing the target node. The login phase precedes iSCSI authentication, so no credentials are required to reach this path.  Reject any login PDU shorter than ISER_HEADERS_LEN before the subtraction, mirroring the existing early return on a failed work completion, so login_req_len can never go negative. The upper bound was already safe: a posted login buffer cannot deliver more than ISER_RX_PAYLOAD_SIZE, so the difference stays at or below MAX_KEY_VALUE_PAIRS and the existing min() clamps it; only the missing lower bound needs to be added.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-52931",
                        "url": "https://ubuntu.com/security/CVE-2026-52931",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  batman-adv: tp_meter: avoid use of uninit sender vars  batadv_tp_recv_ack() and batadv_tp_stop() are only valid for tp_vars in the BATADV_TP_SENDER role. When called with a BATADV_TP_RECEIVER role, it proceeds to read sender-only members that were never initialized, leading to undefined behavior.  This can be triggered when a node that is currently acting as a receiver in an ongoing tp_meter session receives a malicious ACK packet.  Guard against this by checking tp_vars->role immediately after the lookup and bailing out if it is not BATADV_TP_SENDER, before any of those members are accessed.",
                        "cve_priority": "medium",
                        "cve_public_date": "2026-06-24 08:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-52914",
                        "url": "https://ubuntu.com/security/CVE-2026-52914",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  batman-adv: fix fragment reassembly length accounting  batman-adv keeps a running payload length for queued fragments and uses it to validate a fragment chain before reassembly.  That accounting currently allows the accumulated fragment length to be truncated during updates. As a result, malformed fragment chains can bypass the intended validation and drive reassembly with inconsistent length state, leading to a local denial of service.  Fix the accounting by storing the accumulated length in a length-typed field and rejecting update overflows before the existing validation logic runs.  The fix was verified against the original reproducer and against valid fragment reassembly paths.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-24 08:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-46325",
                        "url": "https://ubuntu.com/security/CVE-2026-46325",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE  The current implementation incorrectly handles memory regions (MRs) with page sizes different from the system PAGE_SIZE. The core issue is that rxe_set_page() is called with mr->page_size step increments, but the page_list stores individual struct page pointers, each representing PAGE_SIZE of memory.  ib_sg_to_page() has ensured that when i>=1 either a) SG[i-1].dma_end and SG[i].dma_addr are contiguous or b) SG[i-1].dma_end and SG[i].dma_addr are mr->page_size aligned.  This leads to incorrect iova-to-va conversion in scenarios:  1) page_size < PAGE_SIZE (e.g., MR: 4K, system: 64K):    ibmr->iova = 0x181800    sg[0]: dma_addr=0x181800, len=0x800    sg[1]: dma_addr=0x173000, len=0x1000     Access iova = 0x181800 + 0x810 = 0x182010    Expected VA: 0x173010 (second SG, offset 0x10)    Before fix:      - index = (0x182010 >> 12) - (0x181800 >> 12) = 1      - page_offset = 0x182010 & 0xFFF = 0x10      - xarray[1] stores system page base 0x170000      - Resulting VA: 0x170000 + 0x10 = 0x170010 (wrong)  2) page_size > PAGE_SIZE (e.g., MR: 64K, system: 4K):    ibmr->iova = 0x18f800    sg[0]: dma_addr=0x18f800, len=0x800    sg[1]: dma_addr=0x170000, len=0x1000     Access iova = 0x18f800 + 0x810 = 0x190010    Expected VA: 0x170010 (second SG, offset 0x10)    Before fix:      - index = (0x190010 >> 16) - (0x18f800 >> 16) = 1      - page_offset = 0x190010 & 0xFFFF = 0x10      - xarray[1] stores system page for dma_addr 0x170000      - Resulting VA: system page of 0x170000 + 0x10 = 0x170010 (wrong)  Yi Zhang reported a kernel panic[1] years ago related to this defect.  Solution: 1. Replace xarray with pre-allocated rxe_mr_page array for sequential    indexing (all MR page indices are contiguous) 2. Each rxe_mr_page stores both struct page* and offset within the    system page 3. Handle MR page_size != PAGE_SIZE relationships:    - page_size > PAGE_SIZE: Split MR pages into multiple system pages    - page_size <= PAGE_SIZE: Store offset within system page 4. Add boundary checks and compatibility validation  This ensures correct iova-to-va conversion regardless of MR page size and system PAGE_SIZE relationship, while improving performance through array-based sequential access.  Tests on 4K and 64K PAGE_SIZE hosts: - rdma-core/pytests   $ ./build/bin/run_tests.py  --dev eth0_rxe - blktest:   $ TIMEOUT=30 QUICK_RUN=1 USE_RXE=1 NVMET_TRTYPES=rdma ./check nvme srp rnbd  [1] https://lore.kernel.org/all/CAHj4cs9XRqE25jyVw9rj9YugffLn5+f=1znaBEnu1usLOciD+g@mail.gmail.com/T/",
                        "cve_priority": "low",
                        "cve_public_date": "2026-06-09 14:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-43465",
                        "url": "https://ubuntu.com/security/CVE-2026-43465",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net/mlx5e: RX, Fix XDP multi-buf frag counting for striding RQ  XDP multi-buf programs can modify the layout of the XDP buffer when the program calls bpf_xdp_pull_data() or bpf_xdp_adjust_tail(). The referenced commit in the fixes tag corrected the assumption in the mlx5 driver that the XDP buffer layout doesn't change during a program execution. However, this fix introduced another issue: the dropped fragments still need to be counted on the driver side to avoid page fragment reference counting issues.  The issue was discovered by the drivers/net/xdp.py selftest, more specifically the test_xdp_native_tx_mb: - The mlx5 driver allocates a page_pool page and initializes it with   a frag counter of 64 (pp_ref_count=64) and the internal frag counter   to 0. - The test sends one packet with no payload. - On RX (mlx5e_skb_from_cqe_mpwrq_nonlinear()), mlx5 configures the XDP   buffer with the packet data starting in the first fragment which is the   page mentioned above. - The XDP program runs and calls bpf_xdp_pull_data() which moves the   header into the linear part of the XDP buffer. As the packet doesn't   contain more data, the program drops the tail fragment since it no   longer contains any payload (pp_ref_count=63). - mlx5 device skips counting this fragment. Internal frag counter   remains 0. - mlx5 releases all 64 fragments of the page but page pp_ref_count is   63 => negative reference counting error.  Resulting splat during the test:    WARNING: CPU: 0 PID: 188225 at ./include/net/page_pool/helpers.h:297 mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]   Modules linked in: [...]   CPU: 0 UID: 0 PID: 188225 Comm: ip Not tainted 6.18.0-rc7_for_upstream_min_debug_2025_12_08_11_44 #1 NONE   Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014   RIP: 0010:mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]   [...]   Call Trace:    <TASK>    mlx5e_free_rx_mpwqe+0x20a/0x250 [mlx5_core]    mlx5e_dealloc_rx_mpwqe+0x37/0xb0 [mlx5_core]    mlx5e_free_rx_descs+0x11a/0x170 [mlx5_core]    mlx5e_close_rq+0x78/0xa0 [mlx5_core]    mlx5e_close_queues+0x46/0x2a0 [mlx5_core]    mlx5e_close_channel+0x24/0x90 [mlx5_core]    mlx5e_close_channels+0x5d/0xf0 [mlx5_core]    mlx5e_safe_switch_params+0x2ec/0x380 [mlx5_core]    mlx5e_change_mtu+0x11d/0x490 [mlx5_core]    mlx5e_change_nic_mtu+0x19/0x30 [mlx5_core]    netif_set_mtu_ext+0xfc/0x240    do_setlink.isra.0+0x226/0x1100    rtnl_newlink+0x7a9/0xba0    rtnetlink_rcv_msg+0x220/0x3c0    netlink_rcv_skb+0x4b/0xf0    netlink_unicast+0x255/0x380    netlink_sendmsg+0x1f3/0x420    __sock_sendmsg+0x38/0x60    ____sys_sendmsg+0x1e8/0x240    ___sys_sendmsg+0x7c/0xb0    [...]    __sys_sendmsg+0x5f/0xb0    do_syscall_64+0x55/0xc70  The problem applies for XDP_PASS as well which is handled in a different code path in the driver.  This patch fixes the issue by doing page frag counting on all the original XDP buffer fragments for all relevant XDP actions (XDP_TX , XDP_REDIRECT and XDP_PASS). This is basically reverting to the original counting before the commit in the fixes tag.  As frag_page is still pointing to the original tail, the nr_frags parameter to xdp_update_skb_frags_info() needs to be calculated in a different way to reflect the new nr_frags.",
                        "cve_priority": "low",
                        "cve_public_date": "2026-05-08 15:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-43198",
                        "url": "https://ubuntu.com/security/CVE-2026-43198",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  tcp: fix potential race in tcp_v6_syn_recv_sock()  Code in tcp_v6_syn_recv_sock() after the call to tcp_v4_syn_recv_sock() is done too late.  After tcp_v4_syn_recv_sock(), the child socket is already visible from TCP ehash table and other cpus might use it.  Since newinet->pinet6 is still pointing to the listener ipv6_pinfo bad things can happen as syzbot found.  Move the problematic code in tcp_v6_mapped_child_init() and call this new helper from tcp_v4_syn_recv_sock() before the ehash insertion.  This allows the removal of one tcp_sync_mss(), since tcp_v4_syn_recv_sock() will call it with the correct context.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-05-06 12:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-43197",
                        "url": "https://ubuntu.com/security/CVE-2026-43197",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  netconsole: avoid OOB reads, msg is not nul-terminated  msg passed to netconsole from the console subsystem is not guaranteed to be nul-terminated. Before recent commit 7eab73b18630 (\"netconsole: convert to NBCON console infrastructure\") the message would be placed in printk_shared_pbufs, a static global buffer, so KASAN had harder time catching OOB accesses. Now we see:      printk: console [netcon_ext0] enabled     BUG: KASAN: slab-out-of-bounds in string+0x1f7/0x240     Read of size 1 at addr ffff88813b6d4c00 by task pr/netcon_ext0/594      CPU: 65 UID: 0 PID: 594 Comm: pr/netcon_ext0 Not tainted 6.19.0-11754-g4246fd6547c9     Call Trace:      kasan_report+0xe4/0x120      string+0x1f7/0x240      vsnprintf+0x655/0xba0      scnprintf+0xba/0x120      netconsole_write+0x3fe/0xa10      nbcon_emit_next_record+0x46e/0x860      nbcon_kthread_func+0x623/0x750      Allocated by task 1:      nbcon_alloc+0x1ea/0x450      register_console+0x26b/0xe10      init_netconsole+0xbb0/0xda0      The buggy address belongs to the object at ffff88813b6d4000                 which belongs to the cache kmalloc-4k of size 4096     The buggy address is located 0 bytes to the right of                 allocated 3072-byte region [ffff88813b6d4000, ffff88813b6d4c00)",
                        "cve_priority": "negligible",
                        "cve_public_date": "2026-05-06 12:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-43083",
                        "url": "https://ubuntu.com/security/CVE-2026-43083",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net: ioam6: fix OOB and missing lock  When trace->type.bit6 is set:      if (trace->type.bit6) {         ...         queue = skb_get_tx_queue(dev, skb);         qdisc = rcu_dereference(queue->qdisc);  This code can lead to an out-of-bounds access of the dev->_tx[] array when is_input is true. In such a case, the packet is on the RX path and skb->queue_mapping contains the RX queue index of the ingress device. If the ingress device has more RX queues than the egress device (dev) has TX queues, skb_get_queue_mapping(skb) will exceed dev->num_tx_queues. Add a check to avoid this situation since skb_get_tx_queue() does not clamp the index. This issue has also revealed that per queue visibility cannot be accurate and will be replaced later as a new feature.  While at it, add missing lock around qdisc_qstats_qlen_backlog(). The function __ioam6_fill_trace_data() is called from both softirq and process contexts, hence the use of spin_lock_bh() here.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-05-06 10:16:00 UTC"
                    }
                ],
                "launchpad_bugs_fixed": [
                    2160835,
                    2160836,
                    1786013
                ],
                "changes": [
                    {
                        "cves": [
                            {
                                "cve": "CVE-2026-53225",
                                "url": "https://ubuntu.com/security/CVE-2026-53225",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  sctp: fix uninit-value in __sctp_rcv_asconf_lookup()  __sctp_rcv_asconf_lookup() in net/sctp/input.c only checks that the ASCONF chunk can hold the ADDIP header and a parameter header, then calls af->from_addr_param(), which reads the full address (16 bytes for IPv6) trusting the parameter's declared length.  An unauthenticated peer can send a truncated trailing ASCONF chunk that declares an IPv6 address parameter but stops after the 4-byte parameter header; reached from the no-association lookup path, from_addr_param() then reads uninitialized bytes past the parameter.  Impact: an unauthenticated SCTP peer makes the receive path read up to 16 bytes of uninitialized memory past a truncated ASCONF address parameter.  The sibling __sctp_rcv_init_lookup() bounds parameters with sctp_walk_params(); this path open-codes the fetch and omits the bound. Verify the whole address parameter lies within the chunk before from_addr_param() reads it, the same class of fix as commit 51e5ad549c43 (\"net: sctp: fix KMSAN uninit-value in sctp_inq_pop\").",
                                "cve_priority": "negligible",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53228",
                                "url": "https://ubuntu.com/security/CVE-2026-53228",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  ipv6: sit: reload inner IPv6 header after GSO offloads  ipip6_tunnel_xmit() caches the inner IPv6 header pointer at function entry and continues using it after iptunnel_handle_offloads().  For GSO skbs, iptunnel_handle_offloads() calls skb_header_unclone(). When the skb header is cloned, skb_header_unclone() can call pskb_expand_head(), which may move the skb head. The pskb_expand_head() contract requires pointers into the skb header to be reloaded after the call.  If the later skb_realloc_headroom() branch is not taken, SIT uses the stale iph6 pointer to read the inner hop limit and DS field. That can read from a freed skb head after the old head's remaining clone is released.  Reload iph6 after the offload helper succeeds and before subsequent reads from the inner IPv6 header. Keep the existing reload after skb_realloc_headroom(), since that branch can also replace the skb.",
                                "cve_priority": "medium",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-46242",
                                "url": "https://ubuntu.com/security/CVE-2026-46242",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  eventpoll: fix ep_remove struct eventpoll / struct file UAF  ep_remove() (via ep_remove_file()) cleared file->f_ep under file->f_lock but then kept using @file inside the critical section (is_file_epoll(), hlist_del_rcu() through the head, spin_unlock). A concurrent __fput() taking the eventpoll_release() fastpath in that window observed the transient NULL, skipped eventpoll_release_file() and ran to f_op->release / file_free().  For the epoll-watches-epoll case, f_op->release is ep_eventpoll_release() -> ep_clear_and_put() -> ep_free(), which kfree()s the watched struct eventpoll. Its embedded ->refs hlist_head is exactly where epi->fllink.pprev points, so the subsequent hlist_del_rcu()'s \"*pprev = next\" scribbles into freed kmalloc-192 memory.  In addition, struct file is SLAB_TYPESAFE_BY_RCU, so the slot backing @file could be recycled by alloc_empty_file() -- reinitializing f_lock and f_ep -- while ep_remove() is still nominally inside that lock. The upshot is an attacker-controllable kmem_cache_free() against the wrong slab cache.  Pin @file via epi_fget() at the top of ep_remove() and gate the critical section on the pin succeeding. With the pin held @file cannot reach refcount zero, which holds __fput() off and transitively keeps the watched struct eventpoll alive across the hlist_del_rcu() and the f_lock use, closing both UAFs.  If the pin fails @file has already reached refcount zero and its __fput() is in flight. Because we bailed before clearing f_ep, that path takes the eventpoll_release() slow path into eventpoll_release_file() and blocks on ep->mtx until the waiter side's ep_clear_and_put() drops it. The bailed epi's share of ep->refcount stays intact, so the trailing ep_refcount_dec_and_test() in ep_clear_and_put() cannot free the eventpoll out from under eventpoll_release_file(); the orphaned epi is then cleaned up there.  A successful pin also proves we are not racing eventpoll_release_file() on this epi, so drop the now-redundant re-check of epi->dying under f_lock. The cheap lockless READ_ONCE(epi->dying) fast-path bailout stays.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-05-30 13:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-46331",
                                "url": "https://ubuntu.com/security/CVE-2026-46331",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net/sched: fix pedit partial COW leading to page cache corruption  tcf_pedit_act() computes the COW range for skb_ensure_writable() once before the key loop using tcfp_off_max_hint, but the hint does not account for the runtime header offset added by typed keys. This can leave part of the write region un-COW'd.  Fix by moving skb_ensure_writable() inside the per-key loop where the actual write offset is known, and add overflow checking on the offset arithmetic. For negative offsets (e.g. Ethernet header edits at ingress), use skb_cow() to COW the headroom instead. Guard offset_valid() against INT_MIN, where negation is undefined.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-16 08:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53212",
                                "url": "https://ubuntu.com/security/CVE-2026-53212",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  netfilter: nft_tunnel: fix use-after-free on object destroy  nft_tunnel_obj_destroy() calls metadata_dst_free() which directly kfree()s the metadata_dst, ignoring the dst_entry refcount. Packets that took a reference via dst_hold() in nft_tunnel_obj_eval() and are still queued (e.g. in a netem qdisc) are left with a dangling pointer. When these packets are eventually dequeued, dst_release() operates on freed memory.  Replace metadata_dst_free() with dst_release() so the metadata_dst is freed only after all references are dropped. The dst subsystem already handles metadata_dst cleanup in dst_destroy() when DST_METADATA is set.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53359",
                                "url": "https://ubuntu.com/security/CVE-2026-53359",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  KVM: x86: Fix shadow paging use-after-free due to unexpected role  Commit 0cb2af2ea66ad (\"KVM: x86: Fix shadow paging use-after-free due to unexpected GFN\") fixed a shadow paging mismatch between stored and computed GFNs; the bug could be triggered by changing a PDE mapping from outside the guest, and then deleting a memslot.  The rmap_remove() call would miss entries created after the PDE change because the GFN of the leaf SPTE does not match the GFN of the struct kvm_mmu_page.  A similar hole however remains if the modified PDE points to a non-leaf page.  In this case the gfn can be made to match, but the role does not match: the original large 2MB page creates a kvm_mmu_page with direct=1, while the new 4KB needs a kvm_mmu_page with direct=0.  However, kvm_mmu_get_child_sp() does not compare the role, and therefore reuses the page.  The next step is installing a leaf (4KB) SPTE on the new path which records an rmap entry under the gfn resolved by the walk.  But when that child is zapped its parent kvm_mmu_page has direct=1 and kvm_mmu_page_get_gfn() computes the gfn for the 4KB page as sp->gfn + index instead of using sp->shadowed_translation[] (or sp->gfns[] in older kernels).  It therefore fails to remove the recorded entry.  When the memslot is dropped the shadow page is freed but the rmap entry survives, as in the scenario that was already fixed.  Code that later walks that gfn (dirty logging, MMU notifier invalidation, and so on) dereferences an sptep that lies in the freed page, causing the use-after-free.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-07-04 12:17:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53151",
                                "url": "https://ubuntu.com/security/CVE-2026-53151",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  rxrpc: Fix the ACK parser to extract the SACK table for parsing  Fix modification of the received skbuff in rxrpc_input_soft_acks() and a potential incorrect access of the buffer in a fragmented UDP packet (the packet would probably have to be deliberately pre-generated as fragmented) when AF_RXRPC tries to extract the contents of the SACK table by copying out the contents of the SACK table into a buffer before attempting to parse  AF_RXRPC assumes that it can just call skb_condense() and then validly access the SACK table from skb->data and that it will be a flat buffer - but skb_condense() can silently fail to do anything under some circumstances.  Note that whilst rxrpc_input_soft_acks() should be able to parse extended ACKs, the rest of AF_RXRPC doesn't currently support that.  Further, there's then no need to call skb_condense() in rxrpc_input_ack(), so don't.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-52924",
                                "url": "https://ubuntu.com/security/CVE-2026-52924",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  sctp: purge outqueue on stale COOKIE-ECHO handling  sctp_stream_update() is only invoked when the association is moved into COOKIE_WAIT during association setup/reconfiguration. In this path, the outbound stream scheduler state (stream->out_curr) is expected to be clean, since no user data should have been transmitted yet unless the state machine has already partially progressed.  However, a corner case exists in sctp_sf_do_5_2_6_stale(): when a Stale Cookie ERROR is received, the association is rolled back from COOKIE_ECHOED to COOKIE_WAIT. In this scenario, user data may already have been queued and even bundled with the COOKIE-ECHO chunk.  During the rollback, sctp_stream_update() frees the old stream table and installs a new one, but it does not invalidate stream->out_curr. As a result, out_curr may still point to a freed sctp_stream_out entry from the previous stream state.  Later, SCTP scheduler dequeue paths (FCFS, RR, PRIO, etc.) rely on stream->out_curr->ext, which can lead to use-after-free once the old stream state has been released via sctp_stream_free().  This results in crashes such as (reported by Yuqi):    BUG: KASAN: slab-use-after-free in sctp_sched_fcfs_dequeue+0x13a/0x140   Read of size 8 at addr ff1100004d4d3208 by task mini_poc/9312   CPU: 1 UID: 1001 PID: 9312 Comm: mini_poc Not tainted      7.1.0-rc1-00305-gbd3a4795d574 #5 PREEMPT(full)    sctp_sched_fcfs_dequeue+0x13a/0x140    sctp_outq_flush+0x1603/0x33e0    sctp_do_sm+0x31c9/0x5d30    sctp_assoc_bh_rcv+0x392/0x6f0    sctp_inq_push+0x1db/0x270    sctp_rcv+0x138d/0x3c10  Fix this by fully purging the association outqueue when handling the Stale Cookie case. This ensures all pending transmit and retransmit state is dropped, and any scheduler cached pointers are invalidated, making it safe to rebuild stream state during COOKIE_WAIT restart.  Updating only stream->out_curr would be insufficient, since queued and retransmittable data would still reference the old stream state and trigger later use-after-free in dequeue paths.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-24 08:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53215",
                                "url": "https://ubuntu.com/security/CVE-2026-53215",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net: mvpp2: refill RX buffers before XDP or skb use  The RX error path returns the current descriptor buffer to the hardware BM pool. That is only valid while the driver still owns the buffer.  mvpp2_rx_refill() can fail after the current buffer has been handed to XDP or attached to an skb. In those cases mvpp2_run_xdp() may have recycled, redirected, or queued the page for XDP_TX, and an skb free also retires the data buffer. Returning such a buffer to BM lets hardware DMA into memory that is no longer owned by the RX ring.  Refill the BM pool before handing the current buffer to XDP or to the skb. If the allocation fails there, drop the packet and return the still-owned current buffer to BM, preserving the pool depth. Once the refill succeeds, later local drops retire/free the current buffer instead of returning it to BM.",
                                "cve_priority": "critical",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53176",
                                "url": "https://ubuntu.com/security/CVE-2026-53176",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  IB/isert: Reject login PDUs shorter than ISER_HEADERS_LEN  In drivers/infiniband/ulp/isert/ib_isert.c, isert_login_recv_done() computes the login request payload length as wc->byte_len minus ISER_HEADERS_LEN with no lower bound, and login_req_len is a signed int. A remote iSER initiator can post a login Send work request carrying fewer than ISER_HEADERS_LEN (76) bytes, so the subtraction underflows and login_req_len becomes negative.  isert_rx_login_req() then reads that negative length back into a signed int, takes size = min(rx_buflen, MAX_KEY_VALUE_PAIRS), and because the min() is signed it keeps the negative value; the value is then passed as the memcpy() length and sign-extended to a multi-gigabyte size_t. The copy into the 8192-byte login->req_buf runs far out of bounds and faults, crashing the target node. The login phase precedes iSCSI authentication, so no credentials are required to reach this path.  Reject any login PDU shorter than ISER_HEADERS_LEN before the subtraction, mirroring the existing early return on a failed work completion, so login_req_len can never go negative. The upper bound was already safe: a posted login buffer cannot deliver more than ISER_RX_PAYLOAD_SIZE, so the difference stays at or below MAX_KEY_VALUE_PAIRS and the existing min() clamps it; only the missing lower bound needs to be added.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-52931",
                                "url": "https://ubuntu.com/security/CVE-2026-52931",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  batman-adv: tp_meter: avoid use of uninit sender vars  batadv_tp_recv_ack() and batadv_tp_stop() are only valid for tp_vars in the BATADV_TP_SENDER role. When called with a BATADV_TP_RECEIVER role, it proceeds to read sender-only members that were never initialized, leading to undefined behavior.  This can be triggered when a node that is currently acting as a receiver in an ongoing tp_meter session receives a malicious ACK packet.  Guard against this by checking tp_vars->role immediately after the lookup and bailing out if it is not BATADV_TP_SENDER, before any of those members are accessed.",
                                "cve_priority": "medium",
                                "cve_public_date": "2026-06-24 08:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-52914",
                                "url": "https://ubuntu.com/security/CVE-2026-52914",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  batman-adv: fix fragment reassembly length accounting  batman-adv keeps a running payload length for queued fragments and uses it to validate a fragment chain before reassembly.  That accounting currently allows the accumulated fragment length to be truncated during updates. As a result, malformed fragment chains can bypass the intended validation and drive reassembly with inconsistent length state, leading to a local denial of service.  Fix the accounting by storing the accumulated length in a length-typed field and rejecting update overflows before the existing validation logic runs.  The fix was verified against the original reproducer and against valid fragment reassembly paths.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-24 08:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-46325",
                                "url": "https://ubuntu.com/security/CVE-2026-46325",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE  The current implementation incorrectly handles memory regions (MRs) with page sizes different from the system PAGE_SIZE. The core issue is that rxe_set_page() is called with mr->page_size step increments, but the page_list stores individual struct page pointers, each representing PAGE_SIZE of memory.  ib_sg_to_page() has ensured that when i>=1 either a) SG[i-1].dma_end and SG[i].dma_addr are contiguous or b) SG[i-1].dma_end and SG[i].dma_addr are mr->page_size aligned.  This leads to incorrect iova-to-va conversion in scenarios:  1) page_size < PAGE_SIZE (e.g., MR: 4K, system: 64K):    ibmr->iova = 0x181800    sg[0]: dma_addr=0x181800, len=0x800    sg[1]: dma_addr=0x173000, len=0x1000     Access iova = 0x181800 + 0x810 = 0x182010    Expected VA: 0x173010 (second SG, offset 0x10)    Before fix:      - index = (0x182010 >> 12) - (0x181800 >> 12) = 1      - page_offset = 0x182010 & 0xFFF = 0x10      - xarray[1] stores system page base 0x170000      - Resulting VA: 0x170000 + 0x10 = 0x170010 (wrong)  2) page_size > PAGE_SIZE (e.g., MR: 64K, system: 4K):    ibmr->iova = 0x18f800    sg[0]: dma_addr=0x18f800, len=0x800    sg[1]: dma_addr=0x170000, len=0x1000     Access iova = 0x18f800 + 0x810 = 0x190010    Expected VA: 0x170010 (second SG, offset 0x10)    Before fix:      - index = (0x190010 >> 16) - (0x18f800 >> 16) = 1      - page_offset = 0x190010 & 0xFFFF = 0x10      - xarray[1] stores system page for dma_addr 0x170000      - Resulting VA: system page of 0x170000 + 0x10 = 0x170010 (wrong)  Yi Zhang reported a kernel panic[1] years ago related to this defect.  Solution: 1. Replace xarray with pre-allocated rxe_mr_page array for sequential    indexing (all MR page indices are contiguous) 2. Each rxe_mr_page stores both struct page* and offset within the    system page 3. Handle MR page_size != PAGE_SIZE relationships:    - page_size > PAGE_SIZE: Split MR pages into multiple system pages    - page_size <= PAGE_SIZE: Store offset within system page 4. Add boundary checks and compatibility validation  This ensures correct iova-to-va conversion regardless of MR page size and system PAGE_SIZE relationship, while improving performance through array-based sequential access.  Tests on 4K and 64K PAGE_SIZE hosts: - rdma-core/pytests   $ ./build/bin/run_tests.py  --dev eth0_rxe - blktest:   $ TIMEOUT=30 QUICK_RUN=1 USE_RXE=1 NVMET_TRTYPES=rdma ./check nvme srp rnbd  [1] https://lore.kernel.org/all/CAHj4cs9XRqE25jyVw9rj9YugffLn5+f=1znaBEnu1usLOciD+g@mail.gmail.com/T/",
                                "cve_priority": "low",
                                "cve_public_date": "2026-06-09 14:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-43465",
                                "url": "https://ubuntu.com/security/CVE-2026-43465",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net/mlx5e: RX, Fix XDP multi-buf frag counting for striding RQ  XDP multi-buf programs can modify the layout of the XDP buffer when the program calls bpf_xdp_pull_data() or bpf_xdp_adjust_tail(). The referenced commit in the fixes tag corrected the assumption in the mlx5 driver that the XDP buffer layout doesn't change during a program execution. However, this fix introduced another issue: the dropped fragments still need to be counted on the driver side to avoid page fragment reference counting issues.  The issue was discovered by the drivers/net/xdp.py selftest, more specifically the test_xdp_native_tx_mb: - The mlx5 driver allocates a page_pool page and initializes it with   a frag counter of 64 (pp_ref_count=64) and the internal frag counter   to 0. - The test sends one packet with no payload. - On RX (mlx5e_skb_from_cqe_mpwrq_nonlinear()), mlx5 configures the XDP   buffer with the packet data starting in the first fragment which is the   page mentioned above. - The XDP program runs and calls bpf_xdp_pull_data() which moves the   header into the linear part of the XDP buffer. As the packet doesn't   contain more data, the program drops the tail fragment since it no   longer contains any payload (pp_ref_count=63). - mlx5 device skips counting this fragment. Internal frag counter   remains 0. - mlx5 releases all 64 fragments of the page but page pp_ref_count is   63 => negative reference counting error.  Resulting splat during the test:    WARNING: CPU: 0 PID: 188225 at ./include/net/page_pool/helpers.h:297 mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]   Modules linked in: [...]   CPU: 0 UID: 0 PID: 188225 Comm: ip Not tainted 6.18.0-rc7_for_upstream_min_debug_2025_12_08_11_44 #1 NONE   Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014   RIP: 0010:mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]   [...]   Call Trace:    <TASK>    mlx5e_free_rx_mpwqe+0x20a/0x250 [mlx5_core]    mlx5e_dealloc_rx_mpwqe+0x37/0xb0 [mlx5_core]    mlx5e_free_rx_descs+0x11a/0x170 [mlx5_core]    mlx5e_close_rq+0x78/0xa0 [mlx5_core]    mlx5e_close_queues+0x46/0x2a0 [mlx5_core]    mlx5e_close_channel+0x24/0x90 [mlx5_core]    mlx5e_close_channels+0x5d/0xf0 [mlx5_core]    mlx5e_safe_switch_params+0x2ec/0x380 [mlx5_core]    mlx5e_change_mtu+0x11d/0x490 [mlx5_core]    mlx5e_change_nic_mtu+0x19/0x30 [mlx5_core]    netif_set_mtu_ext+0xfc/0x240    do_setlink.isra.0+0x226/0x1100    rtnl_newlink+0x7a9/0xba0    rtnetlink_rcv_msg+0x220/0x3c0    netlink_rcv_skb+0x4b/0xf0    netlink_unicast+0x255/0x380    netlink_sendmsg+0x1f3/0x420    __sock_sendmsg+0x38/0x60    ____sys_sendmsg+0x1e8/0x240    ___sys_sendmsg+0x7c/0xb0    [...]    __sys_sendmsg+0x5f/0xb0    do_syscall_64+0x55/0xc70  The problem applies for XDP_PASS as well which is handled in a different code path in the driver.  This patch fixes the issue by doing page frag counting on all the original XDP buffer fragments for all relevant XDP actions (XDP_TX , XDP_REDIRECT and XDP_PASS). This is basically reverting to the original counting before the commit in the fixes tag.  As frag_page is still pointing to the original tail, the nr_frags parameter to xdp_update_skb_frags_info() needs to be calculated in a different way to reflect the new nr_frags.",
                                "cve_priority": "low",
                                "cve_public_date": "2026-05-08 15:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-43198",
                                "url": "https://ubuntu.com/security/CVE-2026-43198",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  tcp: fix potential race in tcp_v6_syn_recv_sock()  Code in tcp_v6_syn_recv_sock() after the call to tcp_v4_syn_recv_sock() is done too late.  After tcp_v4_syn_recv_sock(), the child socket is already visible from TCP ehash table and other cpus might use it.  Since newinet->pinet6 is still pointing to the listener ipv6_pinfo bad things can happen as syzbot found.  Move the problematic code in tcp_v6_mapped_child_init() and call this new helper from tcp_v4_syn_recv_sock() before the ehash insertion.  This allows the removal of one tcp_sync_mss(), since tcp_v4_syn_recv_sock() will call it with the correct context.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-05-06 12:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-43197",
                                "url": "https://ubuntu.com/security/CVE-2026-43197",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  netconsole: avoid OOB reads, msg is not nul-terminated  msg passed to netconsole from the console subsystem is not guaranteed to be nul-terminated. Before recent commit 7eab73b18630 (\"netconsole: convert to NBCON console infrastructure\") the message would be placed in printk_shared_pbufs, a static global buffer, so KASAN had harder time catching OOB accesses. Now we see:      printk: console [netcon_ext0] enabled     BUG: KASAN: slab-out-of-bounds in string+0x1f7/0x240     Read of size 1 at addr ffff88813b6d4c00 by task pr/netcon_ext0/594      CPU: 65 UID: 0 PID: 594 Comm: pr/netcon_ext0 Not tainted 6.19.0-11754-g4246fd6547c9     Call Trace:      kasan_report+0xe4/0x120      string+0x1f7/0x240      vsnprintf+0x655/0xba0      scnprintf+0xba/0x120      netconsole_write+0x3fe/0xa10      nbcon_emit_next_record+0x46e/0x860      nbcon_kthread_func+0x623/0x750      Allocated by task 1:      nbcon_alloc+0x1ea/0x450      register_console+0x26b/0xe10      init_netconsole+0xbb0/0xda0      The buggy address belongs to the object at ffff88813b6d4000                 which belongs to the cache kmalloc-4k of size 4096     The buggy address is located 0 bytes to the right of                 allocated 3072-byte region [ffff88813b6d4000, ffff88813b6d4c00)",
                                "cve_priority": "negligible",
                                "cve_public_date": "2026-05-06 12:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-43083",
                                "url": "https://ubuntu.com/security/CVE-2026-43083",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net: ioam6: fix OOB and missing lock  When trace->type.bit6 is set:      if (trace->type.bit6) {         ...         queue = skb_get_tx_queue(dev, skb);         qdisc = rcu_dereference(queue->qdisc);  This code can lead to an out-of-bounds access of the dev->_tx[] array when is_input is true. In such a case, the packet is on the RX path and skb->queue_mapping contains the RX queue index of the ingress device. If the ingress device has more RX queues than the egress device (dev) has TX queues, skb_get_queue_mapping(skb) will exceed dev->num_tx_queues. Add a check to avoid this situation since skb_get_tx_queue() does not clamp the index. This issue has also revealed that per queue visibility cannot be accurate and will be replaced later as a new feature.  While at it, add missing lock around qdisc_qstats_qlen_backlog(). The function __ioam6_fill_trace_data() is called from both softirq and process contexts, hence the use of spin_lock_bh() here.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-05-06 10:16:00 UTC"
                            }
                        ],
                        "log": [
                            "",
                            "  * jammy/linux-riscv-6.8: 6.8.0-137.137~22.04.1 -proposed tracker (LP: #2160835)",
                            "",
                            "  [ Ubuntu: 6.8.0-137.137 ]",
                            "",
                            "  * noble/linux: 6.8.0-137.137 -proposed tracker (LP: #2160836)",
                            "  * Packaging resync (LP: #1786013)",
                            "    - [Packaging] update annotations scripts",
                            "    - [Packaging] debian.master/dkms-versions -- update from kernel-versions",
                            "      (main/s2026.06.22)",
                            "  * CVE-2026-53225",
                            "    - sctp: fix uninit-value in __sctp_rcv_asconf_lookup()",
                            "  * CVE-2026-53228",
                            "    - ipv6: sit: reload inner IPv6 header after GSO offloads",
                            "  * CVE-2026-46242",
                            "    - eventpoll: fix ep_remove struct eventpoll / struct file UAF",
                            "  * CVE-2026-46331",
                            "    - net/sched: fix pedit partial COW leading to page cache corruption",
                            "  * CVE-2026-53212",
                            "    - netfilter: nft_tunnel: fix use-after-free on object destroy",
                            "  * CVE-2026-53359",
                            "    - KVM: x86: Fix shadow paging use-after-free due to unexpected role",
                            "  * CVE-2026-53151",
                            "    - rxrpc: Fix the ACK parser to extract the SACK table for parsing",
                            "  * CVE-2026-52924",
                            "    - sctp: purge outqueue on stale COOKIE-ECHO handling",
                            "  * CVE-2026-53215",
                            "    - net: mvpp2: refill RX buffers before XDP or skb use",
                            "  * CVE-2026-53176",
                            "    - IB/isert: Reject login PDUs shorter than ISER_HEADERS_LEN",
                            "  * CVE-2026-52931",
                            "    - batman-adv: tp_meter: avoid use of uninit sender vars",
                            "  * CVE-2026-52914",
                            "    - batman-adv: fix fragment reassembly length accounting",
                            "  * CVE-2026-46325",
                            "    - RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE",
                            "  * CVE-2026-43465",
                            "    - net/mlx5e: RX, Fix XDP multi-buf frag counting for striding RQ",
                            "  * CVE-2026-43198",
                            "    - tcp: fix potential race in tcp_v6_syn_recv_sock()",
                            "  * CVE-2026-43197",
                            "    - netconsole: avoid OOB reads, msg is not nul-terminated",
                            "  * CVE-2026-43083",
                            "    - net: ioam6: fix OOB and missing lock",
                            ""
                        ],
                        "package": "linux-riscv-6.8",
                        "version": "6.8.0-137.137~22.04.1",
                        "urgency": "medium",
                        "distributions": "jammy",
                        "launchpad_bugs_fixed": [
                            2160835,
                            2160836,
                            1786013
                        ],
                        "author": "Alessio Faina <alessio.faina@canonical.com>",
                        "date": "Wed, 22 Jul 2026 10:15:10 +0200"
                    }
                ],
                "notes": "linux-headers-6.8.0-137-generic version '6.8.0-137.137~22.04.1' (source package linux-riscv-6.8 version '6.8.0-137.137~22.04.1') was added. linux-headers-6.8.0-137-generic version '6.8.0-137.137~22.04.1' has the same source package name, linux-riscv-6.8, as removed package linux-headers-6.8.0-136-generic. As such we can use the source package version of the removed package, '6.8.0-136.136~22.04.3', as the starting point in our changelog diff. Kernel packages are an example of where the binary package name changes for the same source package. Using the removed package source package version as our starting point means we can still get meaningful changelog diffs even for what appears to be a new package.",
                "is_version_downgrade": false
            },
            {
                "name": "linux-image-6.8.0-137-generic",
                "from_version": {
                    "source_package_name": "linux-riscv-6.8",
                    "source_package_version": "6.8.0-136.136~22.04.3",
                    "version": null
                },
                "to_version": {
                    "source_package_name": "linux-riscv-6.8",
                    "source_package_version": "6.8.0-137.137~22.04.1",
                    "version": "6.8.0-137.137~22.04.1"
                },
                "cves": [
                    {
                        "cve": "CVE-2026-53225",
                        "url": "https://ubuntu.com/security/CVE-2026-53225",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  sctp: fix uninit-value in __sctp_rcv_asconf_lookup()  __sctp_rcv_asconf_lookup() in net/sctp/input.c only checks that the ASCONF chunk can hold the ADDIP header and a parameter header, then calls af->from_addr_param(), which reads the full address (16 bytes for IPv6) trusting the parameter's declared length.  An unauthenticated peer can send a truncated trailing ASCONF chunk that declares an IPv6 address parameter but stops after the 4-byte parameter header; reached from the no-association lookup path, from_addr_param() then reads uninitialized bytes past the parameter.  Impact: an unauthenticated SCTP peer makes the receive path read up to 16 bytes of uninitialized memory past a truncated ASCONF address parameter.  The sibling __sctp_rcv_init_lookup() bounds parameters with sctp_walk_params(); this path open-codes the fetch and omits the bound. Verify the whole address parameter lies within the chunk before from_addr_param() reads it, the same class of fix as commit 51e5ad549c43 (\"net: sctp: fix KMSAN uninit-value in sctp_inq_pop\").",
                        "cve_priority": "negligible",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53228",
                        "url": "https://ubuntu.com/security/CVE-2026-53228",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  ipv6: sit: reload inner IPv6 header after GSO offloads  ipip6_tunnel_xmit() caches the inner IPv6 header pointer at function entry and continues using it after iptunnel_handle_offloads().  For GSO skbs, iptunnel_handle_offloads() calls skb_header_unclone(). When the skb header is cloned, skb_header_unclone() can call pskb_expand_head(), which may move the skb head. The pskb_expand_head() contract requires pointers into the skb header to be reloaded after the call.  If the later skb_realloc_headroom() branch is not taken, SIT uses the stale iph6 pointer to read the inner hop limit and DS field. That can read from a freed skb head after the old head's remaining clone is released.  Reload iph6 after the offload helper succeeds and before subsequent reads from the inner IPv6 header. Keep the existing reload after skb_realloc_headroom(), since that branch can also replace the skb.",
                        "cve_priority": "medium",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-46242",
                        "url": "https://ubuntu.com/security/CVE-2026-46242",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  eventpoll: fix ep_remove struct eventpoll / struct file UAF  ep_remove() (via ep_remove_file()) cleared file->f_ep under file->f_lock but then kept using @file inside the critical section (is_file_epoll(), hlist_del_rcu() through the head, spin_unlock). A concurrent __fput() taking the eventpoll_release() fastpath in that window observed the transient NULL, skipped eventpoll_release_file() and ran to f_op->release / file_free().  For the epoll-watches-epoll case, f_op->release is ep_eventpoll_release() -> ep_clear_and_put() -> ep_free(), which kfree()s the watched struct eventpoll. Its embedded ->refs hlist_head is exactly where epi->fllink.pprev points, so the subsequent hlist_del_rcu()'s \"*pprev = next\" scribbles into freed kmalloc-192 memory.  In addition, struct file is SLAB_TYPESAFE_BY_RCU, so the slot backing @file could be recycled by alloc_empty_file() -- reinitializing f_lock and f_ep -- while ep_remove() is still nominally inside that lock. The upshot is an attacker-controllable kmem_cache_free() against the wrong slab cache.  Pin @file via epi_fget() at the top of ep_remove() and gate the critical section on the pin succeeding. With the pin held @file cannot reach refcount zero, which holds __fput() off and transitively keeps the watched struct eventpoll alive across the hlist_del_rcu() and the f_lock use, closing both UAFs.  If the pin fails @file has already reached refcount zero and its __fput() is in flight. Because we bailed before clearing f_ep, that path takes the eventpoll_release() slow path into eventpoll_release_file() and blocks on ep->mtx until the waiter side's ep_clear_and_put() drops it. The bailed epi's share of ep->refcount stays intact, so the trailing ep_refcount_dec_and_test() in ep_clear_and_put() cannot free the eventpoll out from under eventpoll_release_file(); the orphaned epi is then cleaned up there.  A successful pin also proves we are not racing eventpoll_release_file() on this epi, so drop the now-redundant re-check of epi->dying under f_lock. The cheap lockless READ_ONCE(epi->dying) fast-path bailout stays.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-05-30 13:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-46331",
                        "url": "https://ubuntu.com/security/CVE-2026-46331",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net/sched: fix pedit partial COW leading to page cache corruption  tcf_pedit_act() computes the COW range for skb_ensure_writable() once before the key loop using tcfp_off_max_hint, but the hint does not account for the runtime header offset added by typed keys. This can leave part of the write region un-COW'd.  Fix by moving skb_ensure_writable() inside the per-key loop where the actual write offset is known, and add overflow checking on the offset arithmetic. For negative offsets (e.g. Ethernet header edits at ingress), use skb_cow() to COW the headroom instead. Guard offset_valid() against INT_MIN, where negation is undefined.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-16 08:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53212",
                        "url": "https://ubuntu.com/security/CVE-2026-53212",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  netfilter: nft_tunnel: fix use-after-free on object destroy  nft_tunnel_obj_destroy() calls metadata_dst_free() which directly kfree()s the metadata_dst, ignoring the dst_entry refcount. Packets that took a reference via dst_hold() in nft_tunnel_obj_eval() and are still queued (e.g. in a netem qdisc) are left with a dangling pointer. When these packets are eventually dequeued, dst_release() operates on freed memory.  Replace metadata_dst_free() with dst_release() so the metadata_dst is freed only after all references are dropped. The dst subsystem already handles metadata_dst cleanup in dst_destroy() when DST_METADATA is set.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53359",
                        "url": "https://ubuntu.com/security/CVE-2026-53359",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  KVM: x86: Fix shadow paging use-after-free due to unexpected role  Commit 0cb2af2ea66ad (\"KVM: x86: Fix shadow paging use-after-free due to unexpected GFN\") fixed a shadow paging mismatch between stored and computed GFNs; the bug could be triggered by changing a PDE mapping from outside the guest, and then deleting a memslot.  The rmap_remove() call would miss entries created after the PDE change because the GFN of the leaf SPTE does not match the GFN of the struct kvm_mmu_page.  A similar hole however remains if the modified PDE points to a non-leaf page.  In this case the gfn can be made to match, but the role does not match: the original large 2MB page creates a kvm_mmu_page with direct=1, while the new 4KB needs a kvm_mmu_page with direct=0.  However, kvm_mmu_get_child_sp() does not compare the role, and therefore reuses the page.  The next step is installing a leaf (4KB) SPTE on the new path which records an rmap entry under the gfn resolved by the walk.  But when that child is zapped its parent kvm_mmu_page has direct=1 and kvm_mmu_page_get_gfn() computes the gfn for the 4KB page as sp->gfn + index instead of using sp->shadowed_translation[] (or sp->gfns[] in older kernels).  It therefore fails to remove the recorded entry.  When the memslot is dropped the shadow page is freed but the rmap entry survives, as in the scenario that was already fixed.  Code that later walks that gfn (dirty logging, MMU notifier invalidation, and so on) dereferences an sptep that lies in the freed page, causing the use-after-free.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-07-04 12:17:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53151",
                        "url": "https://ubuntu.com/security/CVE-2026-53151",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  rxrpc: Fix the ACK parser to extract the SACK table for parsing  Fix modification of the received skbuff in rxrpc_input_soft_acks() and a potential incorrect access of the buffer in a fragmented UDP packet (the packet would probably have to be deliberately pre-generated as fragmented) when AF_RXRPC tries to extract the contents of the SACK table by copying out the contents of the SACK table into a buffer before attempting to parse  AF_RXRPC assumes that it can just call skb_condense() and then validly access the SACK table from skb->data and that it will be a flat buffer - but skb_condense() can silently fail to do anything under some circumstances.  Note that whilst rxrpc_input_soft_acks() should be able to parse extended ACKs, the rest of AF_RXRPC doesn't currently support that.  Further, there's then no need to call skb_condense() in rxrpc_input_ack(), so don't.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-52924",
                        "url": "https://ubuntu.com/security/CVE-2026-52924",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  sctp: purge outqueue on stale COOKIE-ECHO handling  sctp_stream_update() is only invoked when the association is moved into COOKIE_WAIT during association setup/reconfiguration. In this path, the outbound stream scheduler state (stream->out_curr) is expected to be clean, since no user data should have been transmitted yet unless the state machine has already partially progressed.  However, a corner case exists in sctp_sf_do_5_2_6_stale(): when a Stale Cookie ERROR is received, the association is rolled back from COOKIE_ECHOED to COOKIE_WAIT. In this scenario, user data may already have been queued and even bundled with the COOKIE-ECHO chunk.  During the rollback, sctp_stream_update() frees the old stream table and installs a new one, but it does not invalidate stream->out_curr. As a result, out_curr may still point to a freed sctp_stream_out entry from the previous stream state.  Later, SCTP scheduler dequeue paths (FCFS, RR, PRIO, etc.) rely on stream->out_curr->ext, which can lead to use-after-free once the old stream state has been released via sctp_stream_free().  This results in crashes such as (reported by Yuqi):    BUG: KASAN: slab-use-after-free in sctp_sched_fcfs_dequeue+0x13a/0x140   Read of size 8 at addr ff1100004d4d3208 by task mini_poc/9312   CPU: 1 UID: 1001 PID: 9312 Comm: mini_poc Not tainted      7.1.0-rc1-00305-gbd3a4795d574 #5 PREEMPT(full)    sctp_sched_fcfs_dequeue+0x13a/0x140    sctp_outq_flush+0x1603/0x33e0    sctp_do_sm+0x31c9/0x5d30    sctp_assoc_bh_rcv+0x392/0x6f0    sctp_inq_push+0x1db/0x270    sctp_rcv+0x138d/0x3c10  Fix this by fully purging the association outqueue when handling the Stale Cookie case. This ensures all pending transmit and retransmit state is dropped, and any scheduler cached pointers are invalidated, making it safe to rebuild stream state during COOKIE_WAIT restart.  Updating only stream->out_curr would be insufficient, since queued and retransmittable data would still reference the old stream state and trigger later use-after-free in dequeue paths.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-24 08:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53215",
                        "url": "https://ubuntu.com/security/CVE-2026-53215",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net: mvpp2: refill RX buffers before XDP or skb use  The RX error path returns the current descriptor buffer to the hardware BM pool. That is only valid while the driver still owns the buffer.  mvpp2_rx_refill() can fail after the current buffer has been handed to XDP or attached to an skb. In those cases mvpp2_run_xdp() may have recycled, redirected, or queued the page for XDP_TX, and an skb free also retires the data buffer. Returning such a buffer to BM lets hardware DMA into memory that is no longer owned by the RX ring.  Refill the BM pool before handing the current buffer to XDP or to the skb. If the allocation fails there, drop the packet and return the still-owned current buffer to BM, preserving the pool depth. Once the refill succeeds, later local drops retire/free the current buffer instead of returning it to BM.",
                        "cve_priority": "critical",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53176",
                        "url": "https://ubuntu.com/security/CVE-2026-53176",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  IB/isert: Reject login PDUs shorter than ISER_HEADERS_LEN  In drivers/infiniband/ulp/isert/ib_isert.c, isert_login_recv_done() computes the login request payload length as wc->byte_len minus ISER_HEADERS_LEN with no lower bound, and login_req_len is a signed int. A remote iSER initiator can post a login Send work request carrying fewer than ISER_HEADERS_LEN (76) bytes, so the subtraction underflows and login_req_len becomes negative.  isert_rx_login_req() then reads that negative length back into a signed int, takes size = min(rx_buflen, MAX_KEY_VALUE_PAIRS), and because the min() is signed it keeps the negative value; the value is then passed as the memcpy() length and sign-extended to a multi-gigabyte size_t. The copy into the 8192-byte login->req_buf runs far out of bounds and faults, crashing the target node. The login phase precedes iSCSI authentication, so no credentials are required to reach this path.  Reject any login PDU shorter than ISER_HEADERS_LEN before the subtraction, mirroring the existing early return on a failed work completion, so login_req_len can never go negative. The upper bound was already safe: a posted login buffer cannot deliver more than ISER_RX_PAYLOAD_SIZE, so the difference stays at or below MAX_KEY_VALUE_PAIRS and the existing min() clamps it; only the missing lower bound needs to be added.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-52931",
                        "url": "https://ubuntu.com/security/CVE-2026-52931",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  batman-adv: tp_meter: avoid use of uninit sender vars  batadv_tp_recv_ack() and batadv_tp_stop() are only valid for tp_vars in the BATADV_TP_SENDER role. When called with a BATADV_TP_RECEIVER role, it proceeds to read sender-only members that were never initialized, leading to undefined behavior.  This can be triggered when a node that is currently acting as a receiver in an ongoing tp_meter session receives a malicious ACK packet.  Guard against this by checking tp_vars->role immediately after the lookup and bailing out if it is not BATADV_TP_SENDER, before any of those members are accessed.",
                        "cve_priority": "medium",
                        "cve_public_date": "2026-06-24 08:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-52914",
                        "url": "https://ubuntu.com/security/CVE-2026-52914",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  batman-adv: fix fragment reassembly length accounting  batman-adv keeps a running payload length for queued fragments and uses it to validate a fragment chain before reassembly.  That accounting currently allows the accumulated fragment length to be truncated during updates. As a result, malformed fragment chains can bypass the intended validation and drive reassembly with inconsistent length state, leading to a local denial of service.  Fix the accounting by storing the accumulated length in a length-typed field and rejecting update overflows before the existing validation logic runs.  The fix was verified against the original reproducer and against valid fragment reassembly paths.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-24 08:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-46325",
                        "url": "https://ubuntu.com/security/CVE-2026-46325",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE  The current implementation incorrectly handles memory regions (MRs) with page sizes different from the system PAGE_SIZE. The core issue is that rxe_set_page() is called with mr->page_size step increments, but the page_list stores individual struct page pointers, each representing PAGE_SIZE of memory.  ib_sg_to_page() has ensured that when i>=1 either a) SG[i-1].dma_end and SG[i].dma_addr are contiguous or b) SG[i-1].dma_end and SG[i].dma_addr are mr->page_size aligned.  This leads to incorrect iova-to-va conversion in scenarios:  1) page_size < PAGE_SIZE (e.g., MR: 4K, system: 64K):    ibmr->iova = 0x181800    sg[0]: dma_addr=0x181800, len=0x800    sg[1]: dma_addr=0x173000, len=0x1000     Access iova = 0x181800 + 0x810 = 0x182010    Expected VA: 0x173010 (second SG, offset 0x10)    Before fix:      - index = (0x182010 >> 12) - (0x181800 >> 12) = 1      - page_offset = 0x182010 & 0xFFF = 0x10      - xarray[1] stores system page base 0x170000      - Resulting VA: 0x170000 + 0x10 = 0x170010 (wrong)  2) page_size > PAGE_SIZE (e.g., MR: 64K, system: 4K):    ibmr->iova = 0x18f800    sg[0]: dma_addr=0x18f800, len=0x800    sg[1]: dma_addr=0x170000, len=0x1000     Access iova = 0x18f800 + 0x810 = 0x190010    Expected VA: 0x170010 (second SG, offset 0x10)    Before fix:      - index = (0x190010 >> 16) - (0x18f800 >> 16) = 1      - page_offset = 0x190010 & 0xFFFF = 0x10      - xarray[1] stores system page for dma_addr 0x170000      - Resulting VA: system page of 0x170000 + 0x10 = 0x170010 (wrong)  Yi Zhang reported a kernel panic[1] years ago related to this defect.  Solution: 1. Replace xarray with pre-allocated rxe_mr_page array for sequential    indexing (all MR page indices are contiguous) 2. Each rxe_mr_page stores both struct page* and offset within the    system page 3. Handle MR page_size != PAGE_SIZE relationships:    - page_size > PAGE_SIZE: Split MR pages into multiple system pages    - page_size <= PAGE_SIZE: Store offset within system page 4. Add boundary checks and compatibility validation  This ensures correct iova-to-va conversion regardless of MR page size and system PAGE_SIZE relationship, while improving performance through array-based sequential access.  Tests on 4K and 64K PAGE_SIZE hosts: - rdma-core/pytests   $ ./build/bin/run_tests.py  --dev eth0_rxe - blktest:   $ TIMEOUT=30 QUICK_RUN=1 USE_RXE=1 NVMET_TRTYPES=rdma ./check nvme srp rnbd  [1] https://lore.kernel.org/all/CAHj4cs9XRqE25jyVw9rj9YugffLn5+f=1znaBEnu1usLOciD+g@mail.gmail.com/T/",
                        "cve_priority": "low",
                        "cve_public_date": "2026-06-09 14:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-43465",
                        "url": "https://ubuntu.com/security/CVE-2026-43465",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net/mlx5e: RX, Fix XDP multi-buf frag counting for striding RQ  XDP multi-buf programs can modify the layout of the XDP buffer when the program calls bpf_xdp_pull_data() or bpf_xdp_adjust_tail(). The referenced commit in the fixes tag corrected the assumption in the mlx5 driver that the XDP buffer layout doesn't change during a program execution. However, this fix introduced another issue: the dropped fragments still need to be counted on the driver side to avoid page fragment reference counting issues.  The issue was discovered by the drivers/net/xdp.py selftest, more specifically the test_xdp_native_tx_mb: - The mlx5 driver allocates a page_pool page and initializes it with   a frag counter of 64 (pp_ref_count=64) and the internal frag counter   to 0. - The test sends one packet with no payload. - On RX (mlx5e_skb_from_cqe_mpwrq_nonlinear()), mlx5 configures the XDP   buffer with the packet data starting in the first fragment which is the   page mentioned above. - The XDP program runs and calls bpf_xdp_pull_data() which moves the   header into the linear part of the XDP buffer. As the packet doesn't   contain more data, the program drops the tail fragment since it no   longer contains any payload (pp_ref_count=63). - mlx5 device skips counting this fragment. Internal frag counter   remains 0. - mlx5 releases all 64 fragments of the page but page pp_ref_count is   63 => negative reference counting error.  Resulting splat during the test:    WARNING: CPU: 0 PID: 188225 at ./include/net/page_pool/helpers.h:297 mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]   Modules linked in: [...]   CPU: 0 UID: 0 PID: 188225 Comm: ip Not tainted 6.18.0-rc7_for_upstream_min_debug_2025_12_08_11_44 #1 NONE   Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014   RIP: 0010:mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]   [...]   Call Trace:    <TASK>    mlx5e_free_rx_mpwqe+0x20a/0x250 [mlx5_core]    mlx5e_dealloc_rx_mpwqe+0x37/0xb0 [mlx5_core]    mlx5e_free_rx_descs+0x11a/0x170 [mlx5_core]    mlx5e_close_rq+0x78/0xa0 [mlx5_core]    mlx5e_close_queues+0x46/0x2a0 [mlx5_core]    mlx5e_close_channel+0x24/0x90 [mlx5_core]    mlx5e_close_channels+0x5d/0xf0 [mlx5_core]    mlx5e_safe_switch_params+0x2ec/0x380 [mlx5_core]    mlx5e_change_mtu+0x11d/0x490 [mlx5_core]    mlx5e_change_nic_mtu+0x19/0x30 [mlx5_core]    netif_set_mtu_ext+0xfc/0x240    do_setlink.isra.0+0x226/0x1100    rtnl_newlink+0x7a9/0xba0    rtnetlink_rcv_msg+0x220/0x3c0    netlink_rcv_skb+0x4b/0xf0    netlink_unicast+0x255/0x380    netlink_sendmsg+0x1f3/0x420    __sock_sendmsg+0x38/0x60    ____sys_sendmsg+0x1e8/0x240    ___sys_sendmsg+0x7c/0xb0    [...]    __sys_sendmsg+0x5f/0xb0    do_syscall_64+0x55/0xc70  The problem applies for XDP_PASS as well which is handled in a different code path in the driver.  This patch fixes the issue by doing page frag counting on all the original XDP buffer fragments for all relevant XDP actions (XDP_TX , XDP_REDIRECT and XDP_PASS). This is basically reverting to the original counting before the commit in the fixes tag.  As frag_page is still pointing to the original tail, the nr_frags parameter to xdp_update_skb_frags_info() needs to be calculated in a different way to reflect the new nr_frags.",
                        "cve_priority": "low",
                        "cve_public_date": "2026-05-08 15:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-43198",
                        "url": "https://ubuntu.com/security/CVE-2026-43198",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  tcp: fix potential race in tcp_v6_syn_recv_sock()  Code in tcp_v6_syn_recv_sock() after the call to tcp_v4_syn_recv_sock() is done too late.  After tcp_v4_syn_recv_sock(), the child socket is already visible from TCP ehash table and other cpus might use it.  Since newinet->pinet6 is still pointing to the listener ipv6_pinfo bad things can happen as syzbot found.  Move the problematic code in tcp_v6_mapped_child_init() and call this new helper from tcp_v4_syn_recv_sock() before the ehash insertion.  This allows the removal of one tcp_sync_mss(), since tcp_v4_syn_recv_sock() will call it with the correct context.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-05-06 12:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-43197",
                        "url": "https://ubuntu.com/security/CVE-2026-43197",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  netconsole: avoid OOB reads, msg is not nul-terminated  msg passed to netconsole from the console subsystem is not guaranteed to be nul-terminated. Before recent commit 7eab73b18630 (\"netconsole: convert to NBCON console infrastructure\") the message would be placed in printk_shared_pbufs, a static global buffer, so KASAN had harder time catching OOB accesses. Now we see:      printk: console [netcon_ext0] enabled     BUG: KASAN: slab-out-of-bounds in string+0x1f7/0x240     Read of size 1 at addr ffff88813b6d4c00 by task pr/netcon_ext0/594      CPU: 65 UID: 0 PID: 594 Comm: pr/netcon_ext0 Not tainted 6.19.0-11754-g4246fd6547c9     Call Trace:      kasan_report+0xe4/0x120      string+0x1f7/0x240      vsnprintf+0x655/0xba0      scnprintf+0xba/0x120      netconsole_write+0x3fe/0xa10      nbcon_emit_next_record+0x46e/0x860      nbcon_kthread_func+0x623/0x750      Allocated by task 1:      nbcon_alloc+0x1ea/0x450      register_console+0x26b/0xe10      init_netconsole+0xbb0/0xda0      The buggy address belongs to the object at ffff88813b6d4000                 which belongs to the cache kmalloc-4k of size 4096     The buggy address is located 0 bytes to the right of                 allocated 3072-byte region [ffff88813b6d4000, ffff88813b6d4c00)",
                        "cve_priority": "negligible",
                        "cve_public_date": "2026-05-06 12:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-43083",
                        "url": "https://ubuntu.com/security/CVE-2026-43083",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net: ioam6: fix OOB and missing lock  When trace->type.bit6 is set:      if (trace->type.bit6) {         ...         queue = skb_get_tx_queue(dev, skb);         qdisc = rcu_dereference(queue->qdisc);  This code can lead to an out-of-bounds access of the dev->_tx[] array when is_input is true. In such a case, the packet is on the RX path and skb->queue_mapping contains the RX queue index of the ingress device. If the ingress device has more RX queues than the egress device (dev) has TX queues, skb_get_queue_mapping(skb) will exceed dev->num_tx_queues. Add a check to avoid this situation since skb_get_tx_queue() does not clamp the index. This issue has also revealed that per queue visibility cannot be accurate and will be replaced later as a new feature.  While at it, add missing lock around qdisc_qstats_qlen_backlog(). The function __ioam6_fill_trace_data() is called from both softirq and process contexts, hence the use of spin_lock_bh() here.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-05-06 10:16:00 UTC"
                    }
                ],
                "launchpad_bugs_fixed": [
                    2160835,
                    2160836,
                    1786013
                ],
                "changes": [
                    {
                        "cves": [
                            {
                                "cve": "CVE-2026-53225",
                                "url": "https://ubuntu.com/security/CVE-2026-53225",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  sctp: fix uninit-value in __sctp_rcv_asconf_lookup()  __sctp_rcv_asconf_lookup() in net/sctp/input.c only checks that the ASCONF chunk can hold the ADDIP header and a parameter header, then calls af->from_addr_param(), which reads the full address (16 bytes for IPv6) trusting the parameter's declared length.  An unauthenticated peer can send a truncated trailing ASCONF chunk that declares an IPv6 address parameter but stops after the 4-byte parameter header; reached from the no-association lookup path, from_addr_param() then reads uninitialized bytes past the parameter.  Impact: an unauthenticated SCTP peer makes the receive path read up to 16 bytes of uninitialized memory past a truncated ASCONF address parameter.  The sibling __sctp_rcv_init_lookup() bounds parameters with sctp_walk_params(); this path open-codes the fetch and omits the bound. Verify the whole address parameter lies within the chunk before from_addr_param() reads it, the same class of fix as commit 51e5ad549c43 (\"net: sctp: fix KMSAN uninit-value in sctp_inq_pop\").",
                                "cve_priority": "negligible",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53228",
                                "url": "https://ubuntu.com/security/CVE-2026-53228",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  ipv6: sit: reload inner IPv6 header after GSO offloads  ipip6_tunnel_xmit() caches the inner IPv6 header pointer at function entry and continues using it after iptunnel_handle_offloads().  For GSO skbs, iptunnel_handle_offloads() calls skb_header_unclone(). When the skb header is cloned, skb_header_unclone() can call pskb_expand_head(), which may move the skb head. The pskb_expand_head() contract requires pointers into the skb header to be reloaded after the call.  If the later skb_realloc_headroom() branch is not taken, SIT uses the stale iph6 pointer to read the inner hop limit and DS field. That can read from a freed skb head after the old head's remaining clone is released.  Reload iph6 after the offload helper succeeds and before subsequent reads from the inner IPv6 header. Keep the existing reload after skb_realloc_headroom(), since that branch can also replace the skb.",
                                "cve_priority": "medium",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-46242",
                                "url": "https://ubuntu.com/security/CVE-2026-46242",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  eventpoll: fix ep_remove struct eventpoll / struct file UAF  ep_remove() (via ep_remove_file()) cleared file->f_ep under file->f_lock but then kept using @file inside the critical section (is_file_epoll(), hlist_del_rcu() through the head, spin_unlock). A concurrent __fput() taking the eventpoll_release() fastpath in that window observed the transient NULL, skipped eventpoll_release_file() and ran to f_op->release / file_free().  For the epoll-watches-epoll case, f_op->release is ep_eventpoll_release() -> ep_clear_and_put() -> ep_free(), which kfree()s the watched struct eventpoll. Its embedded ->refs hlist_head is exactly where epi->fllink.pprev points, so the subsequent hlist_del_rcu()'s \"*pprev = next\" scribbles into freed kmalloc-192 memory.  In addition, struct file is SLAB_TYPESAFE_BY_RCU, so the slot backing @file could be recycled by alloc_empty_file() -- reinitializing f_lock and f_ep -- while ep_remove() is still nominally inside that lock. The upshot is an attacker-controllable kmem_cache_free() against the wrong slab cache.  Pin @file via epi_fget() at the top of ep_remove() and gate the critical section on the pin succeeding. With the pin held @file cannot reach refcount zero, which holds __fput() off and transitively keeps the watched struct eventpoll alive across the hlist_del_rcu() and the f_lock use, closing both UAFs.  If the pin fails @file has already reached refcount zero and its __fput() is in flight. Because we bailed before clearing f_ep, that path takes the eventpoll_release() slow path into eventpoll_release_file() and blocks on ep->mtx until the waiter side's ep_clear_and_put() drops it. The bailed epi's share of ep->refcount stays intact, so the trailing ep_refcount_dec_and_test() in ep_clear_and_put() cannot free the eventpoll out from under eventpoll_release_file(); the orphaned epi is then cleaned up there.  A successful pin also proves we are not racing eventpoll_release_file() on this epi, so drop the now-redundant re-check of epi->dying under f_lock. The cheap lockless READ_ONCE(epi->dying) fast-path bailout stays.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-05-30 13:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-46331",
                                "url": "https://ubuntu.com/security/CVE-2026-46331",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net/sched: fix pedit partial COW leading to page cache corruption  tcf_pedit_act() computes the COW range for skb_ensure_writable() once before the key loop using tcfp_off_max_hint, but the hint does not account for the runtime header offset added by typed keys. This can leave part of the write region un-COW'd.  Fix by moving skb_ensure_writable() inside the per-key loop where the actual write offset is known, and add overflow checking on the offset arithmetic. For negative offsets (e.g. Ethernet header edits at ingress), use skb_cow() to COW the headroom instead. Guard offset_valid() against INT_MIN, where negation is undefined.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-16 08:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53212",
                                "url": "https://ubuntu.com/security/CVE-2026-53212",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  netfilter: nft_tunnel: fix use-after-free on object destroy  nft_tunnel_obj_destroy() calls metadata_dst_free() which directly kfree()s the metadata_dst, ignoring the dst_entry refcount. Packets that took a reference via dst_hold() in nft_tunnel_obj_eval() and are still queued (e.g. in a netem qdisc) are left with a dangling pointer. When these packets are eventually dequeued, dst_release() operates on freed memory.  Replace metadata_dst_free() with dst_release() so the metadata_dst is freed only after all references are dropped. The dst subsystem already handles metadata_dst cleanup in dst_destroy() when DST_METADATA is set.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53359",
                                "url": "https://ubuntu.com/security/CVE-2026-53359",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  KVM: x86: Fix shadow paging use-after-free due to unexpected role  Commit 0cb2af2ea66ad (\"KVM: x86: Fix shadow paging use-after-free due to unexpected GFN\") fixed a shadow paging mismatch between stored and computed GFNs; the bug could be triggered by changing a PDE mapping from outside the guest, and then deleting a memslot.  The rmap_remove() call would miss entries created after the PDE change because the GFN of the leaf SPTE does not match the GFN of the struct kvm_mmu_page.  A similar hole however remains if the modified PDE points to a non-leaf page.  In this case the gfn can be made to match, but the role does not match: the original large 2MB page creates a kvm_mmu_page with direct=1, while the new 4KB needs a kvm_mmu_page with direct=0.  However, kvm_mmu_get_child_sp() does not compare the role, and therefore reuses the page.  The next step is installing a leaf (4KB) SPTE on the new path which records an rmap entry under the gfn resolved by the walk.  But when that child is zapped its parent kvm_mmu_page has direct=1 and kvm_mmu_page_get_gfn() computes the gfn for the 4KB page as sp->gfn + index instead of using sp->shadowed_translation[] (or sp->gfns[] in older kernels).  It therefore fails to remove the recorded entry.  When the memslot is dropped the shadow page is freed but the rmap entry survives, as in the scenario that was already fixed.  Code that later walks that gfn (dirty logging, MMU notifier invalidation, and so on) dereferences an sptep that lies in the freed page, causing the use-after-free.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-07-04 12:17:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53151",
                                "url": "https://ubuntu.com/security/CVE-2026-53151",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  rxrpc: Fix the ACK parser to extract the SACK table for parsing  Fix modification of the received skbuff in rxrpc_input_soft_acks() and a potential incorrect access of the buffer in a fragmented UDP packet (the packet would probably have to be deliberately pre-generated as fragmented) when AF_RXRPC tries to extract the contents of the SACK table by copying out the contents of the SACK table into a buffer before attempting to parse  AF_RXRPC assumes that it can just call skb_condense() and then validly access the SACK table from skb->data and that it will be a flat buffer - but skb_condense() can silently fail to do anything under some circumstances.  Note that whilst rxrpc_input_soft_acks() should be able to parse extended ACKs, the rest of AF_RXRPC doesn't currently support that.  Further, there's then no need to call skb_condense() in rxrpc_input_ack(), so don't.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-52924",
                                "url": "https://ubuntu.com/security/CVE-2026-52924",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  sctp: purge outqueue on stale COOKIE-ECHO handling  sctp_stream_update() is only invoked when the association is moved into COOKIE_WAIT during association setup/reconfiguration. In this path, the outbound stream scheduler state (stream->out_curr) is expected to be clean, since no user data should have been transmitted yet unless the state machine has already partially progressed.  However, a corner case exists in sctp_sf_do_5_2_6_stale(): when a Stale Cookie ERROR is received, the association is rolled back from COOKIE_ECHOED to COOKIE_WAIT. In this scenario, user data may already have been queued and even bundled with the COOKIE-ECHO chunk.  During the rollback, sctp_stream_update() frees the old stream table and installs a new one, but it does not invalidate stream->out_curr. As a result, out_curr may still point to a freed sctp_stream_out entry from the previous stream state.  Later, SCTP scheduler dequeue paths (FCFS, RR, PRIO, etc.) rely on stream->out_curr->ext, which can lead to use-after-free once the old stream state has been released via sctp_stream_free().  This results in crashes such as (reported by Yuqi):    BUG: KASAN: slab-use-after-free in sctp_sched_fcfs_dequeue+0x13a/0x140   Read of size 8 at addr ff1100004d4d3208 by task mini_poc/9312   CPU: 1 UID: 1001 PID: 9312 Comm: mini_poc Not tainted      7.1.0-rc1-00305-gbd3a4795d574 #5 PREEMPT(full)    sctp_sched_fcfs_dequeue+0x13a/0x140    sctp_outq_flush+0x1603/0x33e0    sctp_do_sm+0x31c9/0x5d30    sctp_assoc_bh_rcv+0x392/0x6f0    sctp_inq_push+0x1db/0x270    sctp_rcv+0x138d/0x3c10  Fix this by fully purging the association outqueue when handling the Stale Cookie case. This ensures all pending transmit and retransmit state is dropped, and any scheduler cached pointers are invalidated, making it safe to rebuild stream state during COOKIE_WAIT restart.  Updating only stream->out_curr would be insufficient, since queued and retransmittable data would still reference the old stream state and trigger later use-after-free in dequeue paths.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-24 08:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53215",
                                "url": "https://ubuntu.com/security/CVE-2026-53215",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net: mvpp2: refill RX buffers before XDP or skb use  The RX error path returns the current descriptor buffer to the hardware BM pool. That is only valid while the driver still owns the buffer.  mvpp2_rx_refill() can fail after the current buffer has been handed to XDP or attached to an skb. In those cases mvpp2_run_xdp() may have recycled, redirected, or queued the page for XDP_TX, and an skb free also retires the data buffer. Returning such a buffer to BM lets hardware DMA into memory that is no longer owned by the RX ring.  Refill the BM pool before handing the current buffer to XDP or to the skb. If the allocation fails there, drop the packet and return the still-owned current buffer to BM, preserving the pool depth. Once the refill succeeds, later local drops retire/free the current buffer instead of returning it to BM.",
                                "cve_priority": "critical",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53176",
                                "url": "https://ubuntu.com/security/CVE-2026-53176",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  IB/isert: Reject login PDUs shorter than ISER_HEADERS_LEN  In drivers/infiniband/ulp/isert/ib_isert.c, isert_login_recv_done() computes the login request payload length as wc->byte_len minus ISER_HEADERS_LEN with no lower bound, and login_req_len is a signed int. A remote iSER initiator can post a login Send work request carrying fewer than ISER_HEADERS_LEN (76) bytes, so the subtraction underflows and login_req_len becomes negative.  isert_rx_login_req() then reads that negative length back into a signed int, takes size = min(rx_buflen, MAX_KEY_VALUE_PAIRS), and because the min() is signed it keeps the negative value; the value is then passed as the memcpy() length and sign-extended to a multi-gigabyte size_t. The copy into the 8192-byte login->req_buf runs far out of bounds and faults, crashing the target node. The login phase precedes iSCSI authentication, so no credentials are required to reach this path.  Reject any login PDU shorter than ISER_HEADERS_LEN before the subtraction, mirroring the existing early return on a failed work completion, so login_req_len can never go negative. The upper bound was already safe: a posted login buffer cannot deliver more than ISER_RX_PAYLOAD_SIZE, so the difference stays at or below MAX_KEY_VALUE_PAIRS and the existing min() clamps it; only the missing lower bound needs to be added.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-52931",
                                "url": "https://ubuntu.com/security/CVE-2026-52931",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  batman-adv: tp_meter: avoid use of uninit sender vars  batadv_tp_recv_ack() and batadv_tp_stop() are only valid for tp_vars in the BATADV_TP_SENDER role. When called with a BATADV_TP_RECEIVER role, it proceeds to read sender-only members that were never initialized, leading to undefined behavior.  This can be triggered when a node that is currently acting as a receiver in an ongoing tp_meter session receives a malicious ACK packet.  Guard against this by checking tp_vars->role immediately after the lookup and bailing out if it is not BATADV_TP_SENDER, before any of those members are accessed.",
                                "cve_priority": "medium",
                                "cve_public_date": "2026-06-24 08:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-52914",
                                "url": "https://ubuntu.com/security/CVE-2026-52914",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  batman-adv: fix fragment reassembly length accounting  batman-adv keeps a running payload length for queued fragments and uses it to validate a fragment chain before reassembly.  That accounting currently allows the accumulated fragment length to be truncated during updates. As a result, malformed fragment chains can bypass the intended validation and drive reassembly with inconsistent length state, leading to a local denial of service.  Fix the accounting by storing the accumulated length in a length-typed field and rejecting update overflows before the existing validation logic runs.  The fix was verified against the original reproducer and against valid fragment reassembly paths.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-24 08:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-46325",
                                "url": "https://ubuntu.com/security/CVE-2026-46325",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE  The current implementation incorrectly handles memory regions (MRs) with page sizes different from the system PAGE_SIZE. The core issue is that rxe_set_page() is called with mr->page_size step increments, but the page_list stores individual struct page pointers, each representing PAGE_SIZE of memory.  ib_sg_to_page() has ensured that when i>=1 either a) SG[i-1].dma_end and SG[i].dma_addr are contiguous or b) SG[i-1].dma_end and SG[i].dma_addr are mr->page_size aligned.  This leads to incorrect iova-to-va conversion in scenarios:  1) page_size < PAGE_SIZE (e.g., MR: 4K, system: 64K):    ibmr->iova = 0x181800    sg[0]: dma_addr=0x181800, len=0x800    sg[1]: dma_addr=0x173000, len=0x1000     Access iova = 0x181800 + 0x810 = 0x182010    Expected VA: 0x173010 (second SG, offset 0x10)    Before fix:      - index = (0x182010 >> 12) - (0x181800 >> 12) = 1      - page_offset = 0x182010 & 0xFFF = 0x10      - xarray[1] stores system page base 0x170000      - Resulting VA: 0x170000 + 0x10 = 0x170010 (wrong)  2) page_size > PAGE_SIZE (e.g., MR: 64K, system: 4K):    ibmr->iova = 0x18f800    sg[0]: dma_addr=0x18f800, len=0x800    sg[1]: dma_addr=0x170000, len=0x1000     Access iova = 0x18f800 + 0x810 = 0x190010    Expected VA: 0x170010 (second SG, offset 0x10)    Before fix:      - index = (0x190010 >> 16) - (0x18f800 >> 16) = 1      - page_offset = 0x190010 & 0xFFFF = 0x10      - xarray[1] stores system page for dma_addr 0x170000      - Resulting VA: system page of 0x170000 + 0x10 = 0x170010 (wrong)  Yi Zhang reported a kernel panic[1] years ago related to this defect.  Solution: 1. Replace xarray with pre-allocated rxe_mr_page array for sequential    indexing (all MR page indices are contiguous) 2. Each rxe_mr_page stores both struct page* and offset within the    system page 3. Handle MR page_size != PAGE_SIZE relationships:    - page_size > PAGE_SIZE: Split MR pages into multiple system pages    - page_size <= PAGE_SIZE: Store offset within system page 4. Add boundary checks and compatibility validation  This ensures correct iova-to-va conversion regardless of MR page size and system PAGE_SIZE relationship, while improving performance through array-based sequential access.  Tests on 4K and 64K PAGE_SIZE hosts: - rdma-core/pytests   $ ./build/bin/run_tests.py  --dev eth0_rxe - blktest:   $ TIMEOUT=30 QUICK_RUN=1 USE_RXE=1 NVMET_TRTYPES=rdma ./check nvme srp rnbd  [1] https://lore.kernel.org/all/CAHj4cs9XRqE25jyVw9rj9YugffLn5+f=1znaBEnu1usLOciD+g@mail.gmail.com/T/",
                                "cve_priority": "low",
                                "cve_public_date": "2026-06-09 14:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-43465",
                                "url": "https://ubuntu.com/security/CVE-2026-43465",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net/mlx5e: RX, Fix XDP multi-buf frag counting for striding RQ  XDP multi-buf programs can modify the layout of the XDP buffer when the program calls bpf_xdp_pull_data() or bpf_xdp_adjust_tail(). The referenced commit in the fixes tag corrected the assumption in the mlx5 driver that the XDP buffer layout doesn't change during a program execution. However, this fix introduced another issue: the dropped fragments still need to be counted on the driver side to avoid page fragment reference counting issues.  The issue was discovered by the drivers/net/xdp.py selftest, more specifically the test_xdp_native_tx_mb: - The mlx5 driver allocates a page_pool page and initializes it with   a frag counter of 64 (pp_ref_count=64) and the internal frag counter   to 0. - The test sends one packet with no payload. - On RX (mlx5e_skb_from_cqe_mpwrq_nonlinear()), mlx5 configures the XDP   buffer with the packet data starting in the first fragment which is the   page mentioned above. - The XDP program runs and calls bpf_xdp_pull_data() which moves the   header into the linear part of the XDP buffer. As the packet doesn't   contain more data, the program drops the tail fragment since it no   longer contains any payload (pp_ref_count=63). - mlx5 device skips counting this fragment. Internal frag counter   remains 0. - mlx5 releases all 64 fragments of the page but page pp_ref_count is   63 => negative reference counting error.  Resulting splat during the test:    WARNING: CPU: 0 PID: 188225 at ./include/net/page_pool/helpers.h:297 mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]   Modules linked in: [...]   CPU: 0 UID: 0 PID: 188225 Comm: ip Not tainted 6.18.0-rc7_for_upstream_min_debug_2025_12_08_11_44 #1 NONE   Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014   RIP: 0010:mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]   [...]   Call Trace:    <TASK>    mlx5e_free_rx_mpwqe+0x20a/0x250 [mlx5_core]    mlx5e_dealloc_rx_mpwqe+0x37/0xb0 [mlx5_core]    mlx5e_free_rx_descs+0x11a/0x170 [mlx5_core]    mlx5e_close_rq+0x78/0xa0 [mlx5_core]    mlx5e_close_queues+0x46/0x2a0 [mlx5_core]    mlx5e_close_channel+0x24/0x90 [mlx5_core]    mlx5e_close_channels+0x5d/0xf0 [mlx5_core]    mlx5e_safe_switch_params+0x2ec/0x380 [mlx5_core]    mlx5e_change_mtu+0x11d/0x490 [mlx5_core]    mlx5e_change_nic_mtu+0x19/0x30 [mlx5_core]    netif_set_mtu_ext+0xfc/0x240    do_setlink.isra.0+0x226/0x1100    rtnl_newlink+0x7a9/0xba0    rtnetlink_rcv_msg+0x220/0x3c0    netlink_rcv_skb+0x4b/0xf0    netlink_unicast+0x255/0x380    netlink_sendmsg+0x1f3/0x420    __sock_sendmsg+0x38/0x60    ____sys_sendmsg+0x1e8/0x240    ___sys_sendmsg+0x7c/0xb0    [...]    __sys_sendmsg+0x5f/0xb0    do_syscall_64+0x55/0xc70  The problem applies for XDP_PASS as well which is handled in a different code path in the driver.  This patch fixes the issue by doing page frag counting on all the original XDP buffer fragments for all relevant XDP actions (XDP_TX , XDP_REDIRECT and XDP_PASS). This is basically reverting to the original counting before the commit in the fixes tag.  As frag_page is still pointing to the original tail, the nr_frags parameter to xdp_update_skb_frags_info() needs to be calculated in a different way to reflect the new nr_frags.",
                                "cve_priority": "low",
                                "cve_public_date": "2026-05-08 15:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-43198",
                                "url": "https://ubuntu.com/security/CVE-2026-43198",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  tcp: fix potential race in tcp_v6_syn_recv_sock()  Code in tcp_v6_syn_recv_sock() after the call to tcp_v4_syn_recv_sock() is done too late.  After tcp_v4_syn_recv_sock(), the child socket is already visible from TCP ehash table and other cpus might use it.  Since newinet->pinet6 is still pointing to the listener ipv6_pinfo bad things can happen as syzbot found.  Move the problematic code in tcp_v6_mapped_child_init() and call this new helper from tcp_v4_syn_recv_sock() before the ehash insertion.  This allows the removal of one tcp_sync_mss(), since tcp_v4_syn_recv_sock() will call it with the correct context.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-05-06 12:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-43197",
                                "url": "https://ubuntu.com/security/CVE-2026-43197",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  netconsole: avoid OOB reads, msg is not nul-terminated  msg passed to netconsole from the console subsystem is not guaranteed to be nul-terminated. Before recent commit 7eab73b18630 (\"netconsole: convert to NBCON console infrastructure\") the message would be placed in printk_shared_pbufs, a static global buffer, so KASAN had harder time catching OOB accesses. Now we see:      printk: console [netcon_ext0] enabled     BUG: KASAN: slab-out-of-bounds in string+0x1f7/0x240     Read of size 1 at addr ffff88813b6d4c00 by task pr/netcon_ext0/594      CPU: 65 UID: 0 PID: 594 Comm: pr/netcon_ext0 Not tainted 6.19.0-11754-g4246fd6547c9     Call Trace:      kasan_report+0xe4/0x120      string+0x1f7/0x240      vsnprintf+0x655/0xba0      scnprintf+0xba/0x120      netconsole_write+0x3fe/0xa10      nbcon_emit_next_record+0x46e/0x860      nbcon_kthread_func+0x623/0x750      Allocated by task 1:      nbcon_alloc+0x1ea/0x450      register_console+0x26b/0xe10      init_netconsole+0xbb0/0xda0      The buggy address belongs to the object at ffff88813b6d4000                 which belongs to the cache kmalloc-4k of size 4096     The buggy address is located 0 bytes to the right of                 allocated 3072-byte region [ffff88813b6d4000, ffff88813b6d4c00)",
                                "cve_priority": "negligible",
                                "cve_public_date": "2026-05-06 12:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-43083",
                                "url": "https://ubuntu.com/security/CVE-2026-43083",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net: ioam6: fix OOB and missing lock  When trace->type.bit6 is set:      if (trace->type.bit6) {         ...         queue = skb_get_tx_queue(dev, skb);         qdisc = rcu_dereference(queue->qdisc);  This code can lead to an out-of-bounds access of the dev->_tx[] array when is_input is true. In such a case, the packet is on the RX path and skb->queue_mapping contains the RX queue index of the ingress device. If the ingress device has more RX queues than the egress device (dev) has TX queues, skb_get_queue_mapping(skb) will exceed dev->num_tx_queues. Add a check to avoid this situation since skb_get_tx_queue() does not clamp the index. This issue has also revealed that per queue visibility cannot be accurate and will be replaced later as a new feature.  While at it, add missing lock around qdisc_qstats_qlen_backlog(). The function __ioam6_fill_trace_data() is called from both softirq and process contexts, hence the use of spin_lock_bh() here.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-05-06 10:16:00 UTC"
                            }
                        ],
                        "log": [
                            "",
                            "  * jammy/linux-riscv-6.8: 6.8.0-137.137~22.04.1 -proposed tracker (LP: #2160835)",
                            "",
                            "  [ Ubuntu: 6.8.0-137.137 ]",
                            "",
                            "  * noble/linux: 6.8.0-137.137 -proposed tracker (LP: #2160836)",
                            "  * Packaging resync (LP: #1786013)",
                            "    - [Packaging] update annotations scripts",
                            "    - [Packaging] debian.master/dkms-versions -- update from kernel-versions",
                            "      (main/s2026.06.22)",
                            "  * CVE-2026-53225",
                            "    - sctp: fix uninit-value in __sctp_rcv_asconf_lookup()",
                            "  * CVE-2026-53228",
                            "    - ipv6: sit: reload inner IPv6 header after GSO offloads",
                            "  * CVE-2026-46242",
                            "    - eventpoll: fix ep_remove struct eventpoll / struct file UAF",
                            "  * CVE-2026-46331",
                            "    - net/sched: fix pedit partial COW leading to page cache corruption",
                            "  * CVE-2026-53212",
                            "    - netfilter: nft_tunnel: fix use-after-free on object destroy",
                            "  * CVE-2026-53359",
                            "    - KVM: x86: Fix shadow paging use-after-free due to unexpected role",
                            "  * CVE-2026-53151",
                            "    - rxrpc: Fix the ACK parser to extract the SACK table for parsing",
                            "  * CVE-2026-52924",
                            "    - sctp: purge outqueue on stale COOKIE-ECHO handling",
                            "  * CVE-2026-53215",
                            "    - net: mvpp2: refill RX buffers before XDP or skb use",
                            "  * CVE-2026-53176",
                            "    - IB/isert: Reject login PDUs shorter than ISER_HEADERS_LEN",
                            "  * CVE-2026-52931",
                            "    - batman-adv: tp_meter: avoid use of uninit sender vars",
                            "  * CVE-2026-52914",
                            "    - batman-adv: fix fragment reassembly length accounting",
                            "  * CVE-2026-46325",
                            "    - RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE",
                            "  * CVE-2026-43465",
                            "    - net/mlx5e: RX, Fix XDP multi-buf frag counting for striding RQ",
                            "  * CVE-2026-43198",
                            "    - tcp: fix potential race in tcp_v6_syn_recv_sock()",
                            "  * CVE-2026-43197",
                            "    - netconsole: avoid OOB reads, msg is not nul-terminated",
                            "  * CVE-2026-43083",
                            "    - net: ioam6: fix OOB and missing lock",
                            ""
                        ],
                        "package": "linux-riscv-6.8",
                        "version": "6.8.0-137.137~22.04.1",
                        "urgency": "medium",
                        "distributions": "jammy",
                        "launchpad_bugs_fixed": [
                            2160835,
                            2160836,
                            1786013
                        ],
                        "author": "Alessio Faina <alessio.faina@canonical.com>",
                        "date": "Wed, 22 Jul 2026 10:15:10 +0200"
                    }
                ],
                "notes": "linux-image-6.8.0-137-generic version '6.8.0-137.137~22.04.1' (source package linux-riscv-6.8 version '6.8.0-137.137~22.04.1') was added. linux-image-6.8.0-137-generic version '6.8.0-137.137~22.04.1' has the same source package name, linux-riscv-6.8, as removed package linux-headers-6.8.0-136-generic. As such we can use the source package version of the removed package, '6.8.0-136.136~22.04.3', as the starting point in our changelog diff. Kernel packages are an example of where the binary package name changes for the same source package. Using the removed package source package version as our starting point means we can still get meaningful changelog diffs even for what appears to be a new package.",
                "is_version_downgrade": false
            },
            {
                "name": "linux-modules-6.8.0-137-generic",
                "from_version": {
                    "source_package_name": "linux-riscv-6.8",
                    "source_package_version": "6.8.0-136.136~22.04.3",
                    "version": null
                },
                "to_version": {
                    "source_package_name": "linux-riscv-6.8",
                    "source_package_version": "6.8.0-137.137~22.04.1",
                    "version": "6.8.0-137.137~22.04.1"
                },
                "cves": [
                    {
                        "cve": "CVE-2026-53225",
                        "url": "https://ubuntu.com/security/CVE-2026-53225",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  sctp: fix uninit-value in __sctp_rcv_asconf_lookup()  __sctp_rcv_asconf_lookup() in net/sctp/input.c only checks that the ASCONF chunk can hold the ADDIP header and a parameter header, then calls af->from_addr_param(), which reads the full address (16 bytes for IPv6) trusting the parameter's declared length.  An unauthenticated peer can send a truncated trailing ASCONF chunk that declares an IPv6 address parameter but stops after the 4-byte parameter header; reached from the no-association lookup path, from_addr_param() then reads uninitialized bytes past the parameter.  Impact: an unauthenticated SCTP peer makes the receive path read up to 16 bytes of uninitialized memory past a truncated ASCONF address parameter.  The sibling __sctp_rcv_init_lookup() bounds parameters with sctp_walk_params(); this path open-codes the fetch and omits the bound. Verify the whole address parameter lies within the chunk before from_addr_param() reads it, the same class of fix as commit 51e5ad549c43 (\"net: sctp: fix KMSAN uninit-value in sctp_inq_pop\").",
                        "cve_priority": "negligible",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53228",
                        "url": "https://ubuntu.com/security/CVE-2026-53228",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  ipv6: sit: reload inner IPv6 header after GSO offloads  ipip6_tunnel_xmit() caches the inner IPv6 header pointer at function entry and continues using it after iptunnel_handle_offloads().  For GSO skbs, iptunnel_handle_offloads() calls skb_header_unclone(). When the skb header is cloned, skb_header_unclone() can call pskb_expand_head(), which may move the skb head. The pskb_expand_head() contract requires pointers into the skb header to be reloaded after the call.  If the later skb_realloc_headroom() branch is not taken, SIT uses the stale iph6 pointer to read the inner hop limit and DS field. That can read from a freed skb head after the old head's remaining clone is released.  Reload iph6 after the offload helper succeeds and before subsequent reads from the inner IPv6 header. Keep the existing reload after skb_realloc_headroom(), since that branch can also replace the skb.",
                        "cve_priority": "medium",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-46242",
                        "url": "https://ubuntu.com/security/CVE-2026-46242",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  eventpoll: fix ep_remove struct eventpoll / struct file UAF  ep_remove() (via ep_remove_file()) cleared file->f_ep under file->f_lock but then kept using @file inside the critical section (is_file_epoll(), hlist_del_rcu() through the head, spin_unlock). A concurrent __fput() taking the eventpoll_release() fastpath in that window observed the transient NULL, skipped eventpoll_release_file() and ran to f_op->release / file_free().  For the epoll-watches-epoll case, f_op->release is ep_eventpoll_release() -> ep_clear_and_put() -> ep_free(), which kfree()s the watched struct eventpoll. Its embedded ->refs hlist_head is exactly where epi->fllink.pprev points, so the subsequent hlist_del_rcu()'s \"*pprev = next\" scribbles into freed kmalloc-192 memory.  In addition, struct file is SLAB_TYPESAFE_BY_RCU, so the slot backing @file could be recycled by alloc_empty_file() -- reinitializing f_lock and f_ep -- while ep_remove() is still nominally inside that lock. The upshot is an attacker-controllable kmem_cache_free() against the wrong slab cache.  Pin @file via epi_fget() at the top of ep_remove() and gate the critical section on the pin succeeding. With the pin held @file cannot reach refcount zero, which holds __fput() off and transitively keeps the watched struct eventpoll alive across the hlist_del_rcu() and the f_lock use, closing both UAFs.  If the pin fails @file has already reached refcount zero and its __fput() is in flight. Because we bailed before clearing f_ep, that path takes the eventpoll_release() slow path into eventpoll_release_file() and blocks on ep->mtx until the waiter side's ep_clear_and_put() drops it. The bailed epi's share of ep->refcount stays intact, so the trailing ep_refcount_dec_and_test() in ep_clear_and_put() cannot free the eventpoll out from under eventpoll_release_file(); the orphaned epi is then cleaned up there.  A successful pin also proves we are not racing eventpoll_release_file() on this epi, so drop the now-redundant re-check of epi->dying under f_lock. The cheap lockless READ_ONCE(epi->dying) fast-path bailout stays.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-05-30 13:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-46331",
                        "url": "https://ubuntu.com/security/CVE-2026-46331",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net/sched: fix pedit partial COW leading to page cache corruption  tcf_pedit_act() computes the COW range for skb_ensure_writable() once before the key loop using tcfp_off_max_hint, but the hint does not account for the runtime header offset added by typed keys. This can leave part of the write region un-COW'd.  Fix by moving skb_ensure_writable() inside the per-key loop where the actual write offset is known, and add overflow checking on the offset arithmetic. For negative offsets (e.g. Ethernet header edits at ingress), use skb_cow() to COW the headroom instead. Guard offset_valid() against INT_MIN, where negation is undefined.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-16 08:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53212",
                        "url": "https://ubuntu.com/security/CVE-2026-53212",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  netfilter: nft_tunnel: fix use-after-free on object destroy  nft_tunnel_obj_destroy() calls metadata_dst_free() which directly kfree()s the metadata_dst, ignoring the dst_entry refcount. Packets that took a reference via dst_hold() in nft_tunnel_obj_eval() and are still queued (e.g. in a netem qdisc) are left with a dangling pointer. When these packets are eventually dequeued, dst_release() operates on freed memory.  Replace metadata_dst_free() with dst_release() so the metadata_dst is freed only after all references are dropped. The dst subsystem already handles metadata_dst cleanup in dst_destroy() when DST_METADATA is set.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53359",
                        "url": "https://ubuntu.com/security/CVE-2026-53359",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  KVM: x86: Fix shadow paging use-after-free due to unexpected role  Commit 0cb2af2ea66ad (\"KVM: x86: Fix shadow paging use-after-free due to unexpected GFN\") fixed a shadow paging mismatch between stored and computed GFNs; the bug could be triggered by changing a PDE mapping from outside the guest, and then deleting a memslot.  The rmap_remove() call would miss entries created after the PDE change because the GFN of the leaf SPTE does not match the GFN of the struct kvm_mmu_page.  A similar hole however remains if the modified PDE points to a non-leaf page.  In this case the gfn can be made to match, but the role does not match: the original large 2MB page creates a kvm_mmu_page with direct=1, while the new 4KB needs a kvm_mmu_page with direct=0.  However, kvm_mmu_get_child_sp() does not compare the role, and therefore reuses the page.  The next step is installing a leaf (4KB) SPTE on the new path which records an rmap entry under the gfn resolved by the walk.  But when that child is zapped its parent kvm_mmu_page has direct=1 and kvm_mmu_page_get_gfn() computes the gfn for the 4KB page as sp->gfn + index instead of using sp->shadowed_translation[] (or sp->gfns[] in older kernels).  It therefore fails to remove the recorded entry.  When the memslot is dropped the shadow page is freed but the rmap entry survives, as in the scenario that was already fixed.  Code that later walks that gfn (dirty logging, MMU notifier invalidation, and so on) dereferences an sptep that lies in the freed page, causing the use-after-free.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-07-04 12:17:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53151",
                        "url": "https://ubuntu.com/security/CVE-2026-53151",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  rxrpc: Fix the ACK parser to extract the SACK table for parsing  Fix modification of the received skbuff in rxrpc_input_soft_acks() and a potential incorrect access of the buffer in a fragmented UDP packet (the packet would probably have to be deliberately pre-generated as fragmented) when AF_RXRPC tries to extract the contents of the SACK table by copying out the contents of the SACK table into a buffer before attempting to parse  AF_RXRPC assumes that it can just call skb_condense() and then validly access the SACK table from skb->data and that it will be a flat buffer - but skb_condense() can silently fail to do anything under some circumstances.  Note that whilst rxrpc_input_soft_acks() should be able to parse extended ACKs, the rest of AF_RXRPC doesn't currently support that.  Further, there's then no need to call skb_condense() in rxrpc_input_ack(), so don't.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-52924",
                        "url": "https://ubuntu.com/security/CVE-2026-52924",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  sctp: purge outqueue on stale COOKIE-ECHO handling  sctp_stream_update() is only invoked when the association is moved into COOKIE_WAIT during association setup/reconfiguration. In this path, the outbound stream scheduler state (stream->out_curr) is expected to be clean, since no user data should have been transmitted yet unless the state machine has already partially progressed.  However, a corner case exists in sctp_sf_do_5_2_6_stale(): when a Stale Cookie ERROR is received, the association is rolled back from COOKIE_ECHOED to COOKIE_WAIT. In this scenario, user data may already have been queued and even bundled with the COOKIE-ECHO chunk.  During the rollback, sctp_stream_update() frees the old stream table and installs a new one, but it does not invalidate stream->out_curr. As a result, out_curr may still point to a freed sctp_stream_out entry from the previous stream state.  Later, SCTP scheduler dequeue paths (FCFS, RR, PRIO, etc.) rely on stream->out_curr->ext, which can lead to use-after-free once the old stream state has been released via sctp_stream_free().  This results in crashes such as (reported by Yuqi):    BUG: KASAN: slab-use-after-free in sctp_sched_fcfs_dequeue+0x13a/0x140   Read of size 8 at addr ff1100004d4d3208 by task mini_poc/9312   CPU: 1 UID: 1001 PID: 9312 Comm: mini_poc Not tainted      7.1.0-rc1-00305-gbd3a4795d574 #5 PREEMPT(full)    sctp_sched_fcfs_dequeue+0x13a/0x140    sctp_outq_flush+0x1603/0x33e0    sctp_do_sm+0x31c9/0x5d30    sctp_assoc_bh_rcv+0x392/0x6f0    sctp_inq_push+0x1db/0x270    sctp_rcv+0x138d/0x3c10  Fix this by fully purging the association outqueue when handling the Stale Cookie case. This ensures all pending transmit and retransmit state is dropped, and any scheduler cached pointers are invalidated, making it safe to rebuild stream state during COOKIE_WAIT restart.  Updating only stream->out_curr would be insufficient, since queued and retransmittable data would still reference the old stream state and trigger later use-after-free in dequeue paths.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-24 08:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53215",
                        "url": "https://ubuntu.com/security/CVE-2026-53215",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net: mvpp2: refill RX buffers before XDP or skb use  The RX error path returns the current descriptor buffer to the hardware BM pool. That is only valid while the driver still owns the buffer.  mvpp2_rx_refill() can fail after the current buffer has been handed to XDP or attached to an skb. In those cases mvpp2_run_xdp() may have recycled, redirected, or queued the page for XDP_TX, and an skb free also retires the data buffer. Returning such a buffer to BM lets hardware DMA into memory that is no longer owned by the RX ring.  Refill the BM pool before handing the current buffer to XDP or to the skb. If the allocation fails there, drop the packet and return the still-owned current buffer to BM, preserving the pool depth. Once the refill succeeds, later local drops retire/free the current buffer instead of returning it to BM.",
                        "cve_priority": "critical",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53176",
                        "url": "https://ubuntu.com/security/CVE-2026-53176",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  IB/isert: Reject login PDUs shorter than ISER_HEADERS_LEN  In drivers/infiniband/ulp/isert/ib_isert.c, isert_login_recv_done() computes the login request payload length as wc->byte_len minus ISER_HEADERS_LEN with no lower bound, and login_req_len is a signed int. A remote iSER initiator can post a login Send work request carrying fewer than ISER_HEADERS_LEN (76) bytes, so the subtraction underflows and login_req_len becomes negative.  isert_rx_login_req() then reads that negative length back into a signed int, takes size = min(rx_buflen, MAX_KEY_VALUE_PAIRS), and because the min() is signed it keeps the negative value; the value is then passed as the memcpy() length and sign-extended to a multi-gigabyte size_t. The copy into the 8192-byte login->req_buf runs far out of bounds and faults, crashing the target node. The login phase precedes iSCSI authentication, so no credentials are required to reach this path.  Reject any login PDU shorter than ISER_HEADERS_LEN before the subtraction, mirroring the existing early return on a failed work completion, so login_req_len can never go negative. The upper bound was already safe: a posted login buffer cannot deliver more than ISER_RX_PAYLOAD_SIZE, so the difference stays at or below MAX_KEY_VALUE_PAIRS and the existing min() clamps it; only the missing lower bound needs to be added.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-52931",
                        "url": "https://ubuntu.com/security/CVE-2026-52931",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  batman-adv: tp_meter: avoid use of uninit sender vars  batadv_tp_recv_ack() and batadv_tp_stop() are only valid for tp_vars in the BATADV_TP_SENDER role. When called with a BATADV_TP_RECEIVER role, it proceeds to read sender-only members that were never initialized, leading to undefined behavior.  This can be triggered when a node that is currently acting as a receiver in an ongoing tp_meter session receives a malicious ACK packet.  Guard against this by checking tp_vars->role immediately after the lookup and bailing out if it is not BATADV_TP_SENDER, before any of those members are accessed.",
                        "cve_priority": "medium",
                        "cve_public_date": "2026-06-24 08:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-52914",
                        "url": "https://ubuntu.com/security/CVE-2026-52914",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  batman-adv: fix fragment reassembly length accounting  batman-adv keeps a running payload length for queued fragments and uses it to validate a fragment chain before reassembly.  That accounting currently allows the accumulated fragment length to be truncated during updates. As a result, malformed fragment chains can bypass the intended validation and drive reassembly with inconsistent length state, leading to a local denial of service.  Fix the accounting by storing the accumulated length in a length-typed field and rejecting update overflows before the existing validation logic runs.  The fix was verified against the original reproducer and against valid fragment reassembly paths.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-24 08:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-46325",
                        "url": "https://ubuntu.com/security/CVE-2026-46325",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE  The current implementation incorrectly handles memory regions (MRs) with page sizes different from the system PAGE_SIZE. The core issue is that rxe_set_page() is called with mr->page_size step increments, but the page_list stores individual struct page pointers, each representing PAGE_SIZE of memory.  ib_sg_to_page() has ensured that when i>=1 either a) SG[i-1].dma_end and SG[i].dma_addr are contiguous or b) SG[i-1].dma_end and SG[i].dma_addr are mr->page_size aligned.  This leads to incorrect iova-to-va conversion in scenarios:  1) page_size < PAGE_SIZE (e.g., MR: 4K, system: 64K):    ibmr->iova = 0x181800    sg[0]: dma_addr=0x181800, len=0x800    sg[1]: dma_addr=0x173000, len=0x1000     Access iova = 0x181800 + 0x810 = 0x182010    Expected VA: 0x173010 (second SG, offset 0x10)    Before fix:      - index = (0x182010 >> 12) - (0x181800 >> 12) = 1      - page_offset = 0x182010 & 0xFFF = 0x10      - xarray[1] stores system page base 0x170000      - Resulting VA: 0x170000 + 0x10 = 0x170010 (wrong)  2) page_size > PAGE_SIZE (e.g., MR: 64K, system: 4K):    ibmr->iova = 0x18f800    sg[0]: dma_addr=0x18f800, len=0x800    sg[1]: dma_addr=0x170000, len=0x1000     Access iova = 0x18f800 + 0x810 = 0x190010    Expected VA: 0x170010 (second SG, offset 0x10)    Before fix:      - index = (0x190010 >> 16) - (0x18f800 >> 16) = 1      - page_offset = 0x190010 & 0xFFFF = 0x10      - xarray[1] stores system page for dma_addr 0x170000      - Resulting VA: system page of 0x170000 + 0x10 = 0x170010 (wrong)  Yi Zhang reported a kernel panic[1] years ago related to this defect.  Solution: 1. Replace xarray with pre-allocated rxe_mr_page array for sequential    indexing (all MR page indices are contiguous) 2. Each rxe_mr_page stores both struct page* and offset within the    system page 3. Handle MR page_size != PAGE_SIZE relationships:    - page_size > PAGE_SIZE: Split MR pages into multiple system pages    - page_size <= PAGE_SIZE: Store offset within system page 4. Add boundary checks and compatibility validation  This ensures correct iova-to-va conversion regardless of MR page size and system PAGE_SIZE relationship, while improving performance through array-based sequential access.  Tests on 4K and 64K PAGE_SIZE hosts: - rdma-core/pytests   $ ./build/bin/run_tests.py  --dev eth0_rxe - blktest:   $ TIMEOUT=30 QUICK_RUN=1 USE_RXE=1 NVMET_TRTYPES=rdma ./check nvme srp rnbd  [1] https://lore.kernel.org/all/CAHj4cs9XRqE25jyVw9rj9YugffLn5+f=1znaBEnu1usLOciD+g@mail.gmail.com/T/",
                        "cve_priority": "low",
                        "cve_public_date": "2026-06-09 14:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-43465",
                        "url": "https://ubuntu.com/security/CVE-2026-43465",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net/mlx5e: RX, Fix XDP multi-buf frag counting for striding RQ  XDP multi-buf programs can modify the layout of the XDP buffer when the program calls bpf_xdp_pull_data() or bpf_xdp_adjust_tail(). The referenced commit in the fixes tag corrected the assumption in the mlx5 driver that the XDP buffer layout doesn't change during a program execution. However, this fix introduced another issue: the dropped fragments still need to be counted on the driver side to avoid page fragment reference counting issues.  The issue was discovered by the drivers/net/xdp.py selftest, more specifically the test_xdp_native_tx_mb: - The mlx5 driver allocates a page_pool page and initializes it with   a frag counter of 64 (pp_ref_count=64) and the internal frag counter   to 0. - The test sends one packet with no payload. - On RX (mlx5e_skb_from_cqe_mpwrq_nonlinear()), mlx5 configures the XDP   buffer with the packet data starting in the first fragment which is the   page mentioned above. - The XDP program runs and calls bpf_xdp_pull_data() which moves the   header into the linear part of the XDP buffer. As the packet doesn't   contain more data, the program drops the tail fragment since it no   longer contains any payload (pp_ref_count=63). - mlx5 device skips counting this fragment. Internal frag counter   remains 0. - mlx5 releases all 64 fragments of the page but page pp_ref_count is   63 => negative reference counting error.  Resulting splat during the test:    WARNING: CPU: 0 PID: 188225 at ./include/net/page_pool/helpers.h:297 mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]   Modules linked in: [...]   CPU: 0 UID: 0 PID: 188225 Comm: ip Not tainted 6.18.0-rc7_for_upstream_min_debug_2025_12_08_11_44 #1 NONE   Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014   RIP: 0010:mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]   [...]   Call Trace:    <TASK>    mlx5e_free_rx_mpwqe+0x20a/0x250 [mlx5_core]    mlx5e_dealloc_rx_mpwqe+0x37/0xb0 [mlx5_core]    mlx5e_free_rx_descs+0x11a/0x170 [mlx5_core]    mlx5e_close_rq+0x78/0xa0 [mlx5_core]    mlx5e_close_queues+0x46/0x2a0 [mlx5_core]    mlx5e_close_channel+0x24/0x90 [mlx5_core]    mlx5e_close_channels+0x5d/0xf0 [mlx5_core]    mlx5e_safe_switch_params+0x2ec/0x380 [mlx5_core]    mlx5e_change_mtu+0x11d/0x490 [mlx5_core]    mlx5e_change_nic_mtu+0x19/0x30 [mlx5_core]    netif_set_mtu_ext+0xfc/0x240    do_setlink.isra.0+0x226/0x1100    rtnl_newlink+0x7a9/0xba0    rtnetlink_rcv_msg+0x220/0x3c0    netlink_rcv_skb+0x4b/0xf0    netlink_unicast+0x255/0x380    netlink_sendmsg+0x1f3/0x420    __sock_sendmsg+0x38/0x60    ____sys_sendmsg+0x1e8/0x240    ___sys_sendmsg+0x7c/0xb0    [...]    __sys_sendmsg+0x5f/0xb0    do_syscall_64+0x55/0xc70  The problem applies for XDP_PASS as well which is handled in a different code path in the driver.  This patch fixes the issue by doing page frag counting on all the original XDP buffer fragments for all relevant XDP actions (XDP_TX , XDP_REDIRECT and XDP_PASS). This is basically reverting to the original counting before the commit in the fixes tag.  As frag_page is still pointing to the original tail, the nr_frags parameter to xdp_update_skb_frags_info() needs to be calculated in a different way to reflect the new nr_frags.",
                        "cve_priority": "low",
                        "cve_public_date": "2026-05-08 15:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-43198",
                        "url": "https://ubuntu.com/security/CVE-2026-43198",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  tcp: fix potential race in tcp_v6_syn_recv_sock()  Code in tcp_v6_syn_recv_sock() after the call to tcp_v4_syn_recv_sock() is done too late.  After tcp_v4_syn_recv_sock(), the child socket is already visible from TCP ehash table and other cpus might use it.  Since newinet->pinet6 is still pointing to the listener ipv6_pinfo bad things can happen as syzbot found.  Move the problematic code in tcp_v6_mapped_child_init() and call this new helper from tcp_v4_syn_recv_sock() before the ehash insertion.  This allows the removal of one tcp_sync_mss(), since tcp_v4_syn_recv_sock() will call it with the correct context.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-05-06 12:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-43197",
                        "url": "https://ubuntu.com/security/CVE-2026-43197",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  netconsole: avoid OOB reads, msg is not nul-terminated  msg passed to netconsole from the console subsystem is not guaranteed to be nul-terminated. Before recent commit 7eab73b18630 (\"netconsole: convert to NBCON console infrastructure\") the message would be placed in printk_shared_pbufs, a static global buffer, so KASAN had harder time catching OOB accesses. Now we see:      printk: console [netcon_ext0] enabled     BUG: KASAN: slab-out-of-bounds in string+0x1f7/0x240     Read of size 1 at addr ffff88813b6d4c00 by task pr/netcon_ext0/594      CPU: 65 UID: 0 PID: 594 Comm: pr/netcon_ext0 Not tainted 6.19.0-11754-g4246fd6547c9     Call Trace:      kasan_report+0xe4/0x120      string+0x1f7/0x240      vsnprintf+0x655/0xba0      scnprintf+0xba/0x120      netconsole_write+0x3fe/0xa10      nbcon_emit_next_record+0x46e/0x860      nbcon_kthread_func+0x623/0x750      Allocated by task 1:      nbcon_alloc+0x1ea/0x450      register_console+0x26b/0xe10      init_netconsole+0xbb0/0xda0      The buggy address belongs to the object at ffff88813b6d4000                 which belongs to the cache kmalloc-4k of size 4096     The buggy address is located 0 bytes to the right of                 allocated 3072-byte region [ffff88813b6d4000, ffff88813b6d4c00)",
                        "cve_priority": "negligible",
                        "cve_public_date": "2026-05-06 12:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-43083",
                        "url": "https://ubuntu.com/security/CVE-2026-43083",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net: ioam6: fix OOB and missing lock  When trace->type.bit6 is set:      if (trace->type.bit6) {         ...         queue = skb_get_tx_queue(dev, skb);         qdisc = rcu_dereference(queue->qdisc);  This code can lead to an out-of-bounds access of the dev->_tx[] array when is_input is true. In such a case, the packet is on the RX path and skb->queue_mapping contains the RX queue index of the ingress device. If the ingress device has more RX queues than the egress device (dev) has TX queues, skb_get_queue_mapping(skb) will exceed dev->num_tx_queues. Add a check to avoid this situation since skb_get_tx_queue() does not clamp the index. This issue has also revealed that per queue visibility cannot be accurate and will be replaced later as a new feature.  While at it, add missing lock around qdisc_qstats_qlen_backlog(). The function __ioam6_fill_trace_data() is called from both softirq and process contexts, hence the use of spin_lock_bh() here.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-05-06 10:16:00 UTC"
                    }
                ],
                "launchpad_bugs_fixed": [
                    2160835,
                    2160836,
                    1786013
                ],
                "changes": [
                    {
                        "cves": [
                            {
                                "cve": "CVE-2026-53225",
                                "url": "https://ubuntu.com/security/CVE-2026-53225",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  sctp: fix uninit-value in __sctp_rcv_asconf_lookup()  __sctp_rcv_asconf_lookup() in net/sctp/input.c only checks that the ASCONF chunk can hold the ADDIP header and a parameter header, then calls af->from_addr_param(), which reads the full address (16 bytes for IPv6) trusting the parameter's declared length.  An unauthenticated peer can send a truncated trailing ASCONF chunk that declares an IPv6 address parameter but stops after the 4-byte parameter header; reached from the no-association lookup path, from_addr_param() then reads uninitialized bytes past the parameter.  Impact: an unauthenticated SCTP peer makes the receive path read up to 16 bytes of uninitialized memory past a truncated ASCONF address parameter.  The sibling __sctp_rcv_init_lookup() bounds parameters with sctp_walk_params(); this path open-codes the fetch and omits the bound. Verify the whole address parameter lies within the chunk before from_addr_param() reads it, the same class of fix as commit 51e5ad549c43 (\"net: sctp: fix KMSAN uninit-value in sctp_inq_pop\").",
                                "cve_priority": "negligible",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53228",
                                "url": "https://ubuntu.com/security/CVE-2026-53228",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  ipv6: sit: reload inner IPv6 header after GSO offloads  ipip6_tunnel_xmit() caches the inner IPv6 header pointer at function entry and continues using it after iptunnel_handle_offloads().  For GSO skbs, iptunnel_handle_offloads() calls skb_header_unclone(). When the skb header is cloned, skb_header_unclone() can call pskb_expand_head(), which may move the skb head. The pskb_expand_head() contract requires pointers into the skb header to be reloaded after the call.  If the later skb_realloc_headroom() branch is not taken, SIT uses the stale iph6 pointer to read the inner hop limit and DS field. That can read from a freed skb head after the old head's remaining clone is released.  Reload iph6 after the offload helper succeeds and before subsequent reads from the inner IPv6 header. Keep the existing reload after skb_realloc_headroom(), since that branch can also replace the skb.",
                                "cve_priority": "medium",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-46242",
                                "url": "https://ubuntu.com/security/CVE-2026-46242",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  eventpoll: fix ep_remove struct eventpoll / struct file UAF  ep_remove() (via ep_remove_file()) cleared file->f_ep under file->f_lock but then kept using @file inside the critical section (is_file_epoll(), hlist_del_rcu() through the head, spin_unlock). A concurrent __fput() taking the eventpoll_release() fastpath in that window observed the transient NULL, skipped eventpoll_release_file() and ran to f_op->release / file_free().  For the epoll-watches-epoll case, f_op->release is ep_eventpoll_release() -> ep_clear_and_put() -> ep_free(), which kfree()s the watched struct eventpoll. Its embedded ->refs hlist_head is exactly where epi->fllink.pprev points, so the subsequent hlist_del_rcu()'s \"*pprev = next\" scribbles into freed kmalloc-192 memory.  In addition, struct file is SLAB_TYPESAFE_BY_RCU, so the slot backing @file could be recycled by alloc_empty_file() -- reinitializing f_lock and f_ep -- while ep_remove() is still nominally inside that lock. The upshot is an attacker-controllable kmem_cache_free() against the wrong slab cache.  Pin @file via epi_fget() at the top of ep_remove() and gate the critical section on the pin succeeding. With the pin held @file cannot reach refcount zero, which holds __fput() off and transitively keeps the watched struct eventpoll alive across the hlist_del_rcu() and the f_lock use, closing both UAFs.  If the pin fails @file has already reached refcount zero and its __fput() is in flight. Because we bailed before clearing f_ep, that path takes the eventpoll_release() slow path into eventpoll_release_file() and blocks on ep->mtx until the waiter side's ep_clear_and_put() drops it. The bailed epi's share of ep->refcount stays intact, so the trailing ep_refcount_dec_and_test() in ep_clear_and_put() cannot free the eventpoll out from under eventpoll_release_file(); the orphaned epi is then cleaned up there.  A successful pin also proves we are not racing eventpoll_release_file() on this epi, so drop the now-redundant re-check of epi->dying under f_lock. The cheap lockless READ_ONCE(epi->dying) fast-path bailout stays.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-05-30 13:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-46331",
                                "url": "https://ubuntu.com/security/CVE-2026-46331",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net/sched: fix pedit partial COW leading to page cache corruption  tcf_pedit_act() computes the COW range for skb_ensure_writable() once before the key loop using tcfp_off_max_hint, but the hint does not account for the runtime header offset added by typed keys. This can leave part of the write region un-COW'd.  Fix by moving skb_ensure_writable() inside the per-key loop where the actual write offset is known, and add overflow checking on the offset arithmetic. For negative offsets (e.g. Ethernet header edits at ingress), use skb_cow() to COW the headroom instead. Guard offset_valid() against INT_MIN, where negation is undefined.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-16 08:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53212",
                                "url": "https://ubuntu.com/security/CVE-2026-53212",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  netfilter: nft_tunnel: fix use-after-free on object destroy  nft_tunnel_obj_destroy() calls metadata_dst_free() which directly kfree()s the metadata_dst, ignoring the dst_entry refcount. Packets that took a reference via dst_hold() in nft_tunnel_obj_eval() and are still queued (e.g. in a netem qdisc) are left with a dangling pointer. When these packets are eventually dequeued, dst_release() operates on freed memory.  Replace metadata_dst_free() with dst_release() so the metadata_dst is freed only after all references are dropped. The dst subsystem already handles metadata_dst cleanup in dst_destroy() when DST_METADATA is set.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53359",
                                "url": "https://ubuntu.com/security/CVE-2026-53359",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  KVM: x86: Fix shadow paging use-after-free due to unexpected role  Commit 0cb2af2ea66ad (\"KVM: x86: Fix shadow paging use-after-free due to unexpected GFN\") fixed a shadow paging mismatch between stored and computed GFNs; the bug could be triggered by changing a PDE mapping from outside the guest, and then deleting a memslot.  The rmap_remove() call would miss entries created after the PDE change because the GFN of the leaf SPTE does not match the GFN of the struct kvm_mmu_page.  A similar hole however remains if the modified PDE points to a non-leaf page.  In this case the gfn can be made to match, but the role does not match: the original large 2MB page creates a kvm_mmu_page with direct=1, while the new 4KB needs a kvm_mmu_page with direct=0.  However, kvm_mmu_get_child_sp() does not compare the role, and therefore reuses the page.  The next step is installing a leaf (4KB) SPTE on the new path which records an rmap entry under the gfn resolved by the walk.  But when that child is zapped its parent kvm_mmu_page has direct=1 and kvm_mmu_page_get_gfn() computes the gfn for the 4KB page as sp->gfn + index instead of using sp->shadowed_translation[] (or sp->gfns[] in older kernels).  It therefore fails to remove the recorded entry.  When the memslot is dropped the shadow page is freed but the rmap entry survives, as in the scenario that was already fixed.  Code that later walks that gfn (dirty logging, MMU notifier invalidation, and so on) dereferences an sptep that lies in the freed page, causing the use-after-free.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-07-04 12:17:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53151",
                                "url": "https://ubuntu.com/security/CVE-2026-53151",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  rxrpc: Fix the ACK parser to extract the SACK table for parsing  Fix modification of the received skbuff in rxrpc_input_soft_acks() and a potential incorrect access of the buffer in a fragmented UDP packet (the packet would probably have to be deliberately pre-generated as fragmented) when AF_RXRPC tries to extract the contents of the SACK table by copying out the contents of the SACK table into a buffer before attempting to parse  AF_RXRPC assumes that it can just call skb_condense() and then validly access the SACK table from skb->data and that it will be a flat buffer - but skb_condense() can silently fail to do anything under some circumstances.  Note that whilst rxrpc_input_soft_acks() should be able to parse extended ACKs, the rest of AF_RXRPC doesn't currently support that.  Further, there's then no need to call skb_condense() in rxrpc_input_ack(), so don't.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-52924",
                                "url": "https://ubuntu.com/security/CVE-2026-52924",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  sctp: purge outqueue on stale COOKIE-ECHO handling  sctp_stream_update() is only invoked when the association is moved into COOKIE_WAIT during association setup/reconfiguration. In this path, the outbound stream scheduler state (stream->out_curr) is expected to be clean, since no user data should have been transmitted yet unless the state machine has already partially progressed.  However, a corner case exists in sctp_sf_do_5_2_6_stale(): when a Stale Cookie ERROR is received, the association is rolled back from COOKIE_ECHOED to COOKIE_WAIT. In this scenario, user data may already have been queued and even bundled with the COOKIE-ECHO chunk.  During the rollback, sctp_stream_update() frees the old stream table and installs a new one, but it does not invalidate stream->out_curr. As a result, out_curr may still point to a freed sctp_stream_out entry from the previous stream state.  Later, SCTP scheduler dequeue paths (FCFS, RR, PRIO, etc.) rely on stream->out_curr->ext, which can lead to use-after-free once the old stream state has been released via sctp_stream_free().  This results in crashes such as (reported by Yuqi):    BUG: KASAN: slab-use-after-free in sctp_sched_fcfs_dequeue+0x13a/0x140   Read of size 8 at addr ff1100004d4d3208 by task mini_poc/9312   CPU: 1 UID: 1001 PID: 9312 Comm: mini_poc Not tainted      7.1.0-rc1-00305-gbd3a4795d574 #5 PREEMPT(full)    sctp_sched_fcfs_dequeue+0x13a/0x140    sctp_outq_flush+0x1603/0x33e0    sctp_do_sm+0x31c9/0x5d30    sctp_assoc_bh_rcv+0x392/0x6f0    sctp_inq_push+0x1db/0x270    sctp_rcv+0x138d/0x3c10  Fix this by fully purging the association outqueue when handling the Stale Cookie case. This ensures all pending transmit and retransmit state is dropped, and any scheduler cached pointers are invalidated, making it safe to rebuild stream state during COOKIE_WAIT restart.  Updating only stream->out_curr would be insufficient, since queued and retransmittable data would still reference the old stream state and trigger later use-after-free in dequeue paths.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-24 08:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53215",
                                "url": "https://ubuntu.com/security/CVE-2026-53215",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net: mvpp2: refill RX buffers before XDP or skb use  The RX error path returns the current descriptor buffer to the hardware BM pool. That is only valid while the driver still owns the buffer.  mvpp2_rx_refill() can fail after the current buffer has been handed to XDP or attached to an skb. In those cases mvpp2_run_xdp() may have recycled, redirected, or queued the page for XDP_TX, and an skb free also retires the data buffer. Returning such a buffer to BM lets hardware DMA into memory that is no longer owned by the RX ring.  Refill the BM pool before handing the current buffer to XDP or to the skb. If the allocation fails there, drop the packet and return the still-owned current buffer to BM, preserving the pool depth. Once the refill succeeds, later local drops retire/free the current buffer instead of returning it to BM.",
                                "cve_priority": "critical",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53176",
                                "url": "https://ubuntu.com/security/CVE-2026-53176",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  IB/isert: Reject login PDUs shorter than ISER_HEADERS_LEN  In drivers/infiniband/ulp/isert/ib_isert.c, isert_login_recv_done() computes the login request payload length as wc->byte_len minus ISER_HEADERS_LEN with no lower bound, and login_req_len is a signed int. A remote iSER initiator can post a login Send work request carrying fewer than ISER_HEADERS_LEN (76) bytes, so the subtraction underflows and login_req_len becomes negative.  isert_rx_login_req() then reads that negative length back into a signed int, takes size = min(rx_buflen, MAX_KEY_VALUE_PAIRS), and because the min() is signed it keeps the negative value; the value is then passed as the memcpy() length and sign-extended to a multi-gigabyte size_t. The copy into the 8192-byte login->req_buf runs far out of bounds and faults, crashing the target node. The login phase precedes iSCSI authentication, so no credentials are required to reach this path.  Reject any login PDU shorter than ISER_HEADERS_LEN before the subtraction, mirroring the existing early return on a failed work completion, so login_req_len can never go negative. The upper bound was already safe: a posted login buffer cannot deliver more than ISER_RX_PAYLOAD_SIZE, so the difference stays at or below MAX_KEY_VALUE_PAIRS and the existing min() clamps it; only the missing lower bound needs to be added.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-52931",
                                "url": "https://ubuntu.com/security/CVE-2026-52931",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  batman-adv: tp_meter: avoid use of uninit sender vars  batadv_tp_recv_ack() and batadv_tp_stop() are only valid for tp_vars in the BATADV_TP_SENDER role. When called with a BATADV_TP_RECEIVER role, it proceeds to read sender-only members that were never initialized, leading to undefined behavior.  This can be triggered when a node that is currently acting as a receiver in an ongoing tp_meter session receives a malicious ACK packet.  Guard against this by checking tp_vars->role immediately after the lookup and bailing out if it is not BATADV_TP_SENDER, before any of those members are accessed.",
                                "cve_priority": "medium",
                                "cve_public_date": "2026-06-24 08:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-52914",
                                "url": "https://ubuntu.com/security/CVE-2026-52914",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  batman-adv: fix fragment reassembly length accounting  batman-adv keeps a running payload length for queued fragments and uses it to validate a fragment chain before reassembly.  That accounting currently allows the accumulated fragment length to be truncated during updates. As a result, malformed fragment chains can bypass the intended validation and drive reassembly with inconsistent length state, leading to a local denial of service.  Fix the accounting by storing the accumulated length in a length-typed field and rejecting update overflows before the existing validation logic runs.  The fix was verified against the original reproducer and against valid fragment reassembly paths.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-24 08:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-46325",
                                "url": "https://ubuntu.com/security/CVE-2026-46325",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE  The current implementation incorrectly handles memory regions (MRs) with page sizes different from the system PAGE_SIZE. The core issue is that rxe_set_page() is called with mr->page_size step increments, but the page_list stores individual struct page pointers, each representing PAGE_SIZE of memory.  ib_sg_to_page() has ensured that when i>=1 either a) SG[i-1].dma_end and SG[i].dma_addr are contiguous or b) SG[i-1].dma_end and SG[i].dma_addr are mr->page_size aligned.  This leads to incorrect iova-to-va conversion in scenarios:  1) page_size < PAGE_SIZE (e.g., MR: 4K, system: 64K):    ibmr->iova = 0x181800    sg[0]: dma_addr=0x181800, len=0x800    sg[1]: dma_addr=0x173000, len=0x1000     Access iova = 0x181800 + 0x810 = 0x182010    Expected VA: 0x173010 (second SG, offset 0x10)    Before fix:      - index = (0x182010 >> 12) - (0x181800 >> 12) = 1      - page_offset = 0x182010 & 0xFFF = 0x10      - xarray[1] stores system page base 0x170000      - Resulting VA: 0x170000 + 0x10 = 0x170010 (wrong)  2) page_size > PAGE_SIZE (e.g., MR: 64K, system: 4K):    ibmr->iova = 0x18f800    sg[0]: dma_addr=0x18f800, len=0x800    sg[1]: dma_addr=0x170000, len=0x1000     Access iova = 0x18f800 + 0x810 = 0x190010    Expected VA: 0x170010 (second SG, offset 0x10)    Before fix:      - index = (0x190010 >> 16) - (0x18f800 >> 16) = 1      - page_offset = 0x190010 & 0xFFFF = 0x10      - xarray[1] stores system page for dma_addr 0x170000      - Resulting VA: system page of 0x170000 + 0x10 = 0x170010 (wrong)  Yi Zhang reported a kernel panic[1] years ago related to this defect.  Solution: 1. Replace xarray with pre-allocated rxe_mr_page array for sequential    indexing (all MR page indices are contiguous) 2. Each rxe_mr_page stores both struct page* and offset within the    system page 3. Handle MR page_size != PAGE_SIZE relationships:    - page_size > PAGE_SIZE: Split MR pages into multiple system pages    - page_size <= PAGE_SIZE: Store offset within system page 4. Add boundary checks and compatibility validation  This ensures correct iova-to-va conversion regardless of MR page size and system PAGE_SIZE relationship, while improving performance through array-based sequential access.  Tests on 4K and 64K PAGE_SIZE hosts: - rdma-core/pytests   $ ./build/bin/run_tests.py  --dev eth0_rxe - blktest:   $ TIMEOUT=30 QUICK_RUN=1 USE_RXE=1 NVMET_TRTYPES=rdma ./check nvme srp rnbd  [1] https://lore.kernel.org/all/CAHj4cs9XRqE25jyVw9rj9YugffLn5+f=1znaBEnu1usLOciD+g@mail.gmail.com/T/",
                                "cve_priority": "low",
                                "cve_public_date": "2026-06-09 14:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-43465",
                                "url": "https://ubuntu.com/security/CVE-2026-43465",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net/mlx5e: RX, Fix XDP multi-buf frag counting for striding RQ  XDP multi-buf programs can modify the layout of the XDP buffer when the program calls bpf_xdp_pull_data() or bpf_xdp_adjust_tail(). The referenced commit in the fixes tag corrected the assumption in the mlx5 driver that the XDP buffer layout doesn't change during a program execution. However, this fix introduced another issue: the dropped fragments still need to be counted on the driver side to avoid page fragment reference counting issues.  The issue was discovered by the drivers/net/xdp.py selftest, more specifically the test_xdp_native_tx_mb: - The mlx5 driver allocates a page_pool page and initializes it with   a frag counter of 64 (pp_ref_count=64) and the internal frag counter   to 0. - The test sends one packet with no payload. - On RX (mlx5e_skb_from_cqe_mpwrq_nonlinear()), mlx5 configures the XDP   buffer with the packet data starting in the first fragment which is the   page mentioned above. - The XDP program runs and calls bpf_xdp_pull_data() which moves the   header into the linear part of the XDP buffer. As the packet doesn't   contain more data, the program drops the tail fragment since it no   longer contains any payload (pp_ref_count=63). - mlx5 device skips counting this fragment. Internal frag counter   remains 0. - mlx5 releases all 64 fragments of the page but page pp_ref_count is   63 => negative reference counting error.  Resulting splat during the test:    WARNING: CPU: 0 PID: 188225 at ./include/net/page_pool/helpers.h:297 mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]   Modules linked in: [...]   CPU: 0 UID: 0 PID: 188225 Comm: ip Not tainted 6.18.0-rc7_for_upstream_min_debug_2025_12_08_11_44 #1 NONE   Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014   RIP: 0010:mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]   [...]   Call Trace:    <TASK>    mlx5e_free_rx_mpwqe+0x20a/0x250 [mlx5_core]    mlx5e_dealloc_rx_mpwqe+0x37/0xb0 [mlx5_core]    mlx5e_free_rx_descs+0x11a/0x170 [mlx5_core]    mlx5e_close_rq+0x78/0xa0 [mlx5_core]    mlx5e_close_queues+0x46/0x2a0 [mlx5_core]    mlx5e_close_channel+0x24/0x90 [mlx5_core]    mlx5e_close_channels+0x5d/0xf0 [mlx5_core]    mlx5e_safe_switch_params+0x2ec/0x380 [mlx5_core]    mlx5e_change_mtu+0x11d/0x490 [mlx5_core]    mlx5e_change_nic_mtu+0x19/0x30 [mlx5_core]    netif_set_mtu_ext+0xfc/0x240    do_setlink.isra.0+0x226/0x1100    rtnl_newlink+0x7a9/0xba0    rtnetlink_rcv_msg+0x220/0x3c0    netlink_rcv_skb+0x4b/0xf0    netlink_unicast+0x255/0x380    netlink_sendmsg+0x1f3/0x420    __sock_sendmsg+0x38/0x60    ____sys_sendmsg+0x1e8/0x240    ___sys_sendmsg+0x7c/0xb0    [...]    __sys_sendmsg+0x5f/0xb0    do_syscall_64+0x55/0xc70  The problem applies for XDP_PASS as well which is handled in a different code path in the driver.  This patch fixes the issue by doing page frag counting on all the original XDP buffer fragments for all relevant XDP actions (XDP_TX , XDP_REDIRECT and XDP_PASS). This is basically reverting to the original counting before the commit in the fixes tag.  As frag_page is still pointing to the original tail, the nr_frags parameter to xdp_update_skb_frags_info() needs to be calculated in a different way to reflect the new nr_frags.",
                                "cve_priority": "low",
                                "cve_public_date": "2026-05-08 15:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-43198",
                                "url": "https://ubuntu.com/security/CVE-2026-43198",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  tcp: fix potential race in tcp_v6_syn_recv_sock()  Code in tcp_v6_syn_recv_sock() after the call to tcp_v4_syn_recv_sock() is done too late.  After tcp_v4_syn_recv_sock(), the child socket is already visible from TCP ehash table and other cpus might use it.  Since newinet->pinet6 is still pointing to the listener ipv6_pinfo bad things can happen as syzbot found.  Move the problematic code in tcp_v6_mapped_child_init() and call this new helper from tcp_v4_syn_recv_sock() before the ehash insertion.  This allows the removal of one tcp_sync_mss(), since tcp_v4_syn_recv_sock() will call it with the correct context.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-05-06 12:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-43197",
                                "url": "https://ubuntu.com/security/CVE-2026-43197",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  netconsole: avoid OOB reads, msg is not nul-terminated  msg passed to netconsole from the console subsystem is not guaranteed to be nul-terminated. Before recent commit 7eab73b18630 (\"netconsole: convert to NBCON console infrastructure\") the message would be placed in printk_shared_pbufs, a static global buffer, so KASAN had harder time catching OOB accesses. Now we see:      printk: console [netcon_ext0] enabled     BUG: KASAN: slab-out-of-bounds in string+0x1f7/0x240     Read of size 1 at addr ffff88813b6d4c00 by task pr/netcon_ext0/594      CPU: 65 UID: 0 PID: 594 Comm: pr/netcon_ext0 Not tainted 6.19.0-11754-g4246fd6547c9     Call Trace:      kasan_report+0xe4/0x120      string+0x1f7/0x240      vsnprintf+0x655/0xba0      scnprintf+0xba/0x120      netconsole_write+0x3fe/0xa10      nbcon_emit_next_record+0x46e/0x860      nbcon_kthread_func+0x623/0x750      Allocated by task 1:      nbcon_alloc+0x1ea/0x450      register_console+0x26b/0xe10      init_netconsole+0xbb0/0xda0      The buggy address belongs to the object at ffff88813b6d4000                 which belongs to the cache kmalloc-4k of size 4096     The buggy address is located 0 bytes to the right of                 allocated 3072-byte region [ffff88813b6d4000, ffff88813b6d4c00)",
                                "cve_priority": "negligible",
                                "cve_public_date": "2026-05-06 12:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-43083",
                                "url": "https://ubuntu.com/security/CVE-2026-43083",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net: ioam6: fix OOB and missing lock  When trace->type.bit6 is set:      if (trace->type.bit6) {         ...         queue = skb_get_tx_queue(dev, skb);         qdisc = rcu_dereference(queue->qdisc);  This code can lead to an out-of-bounds access of the dev->_tx[] array when is_input is true. In such a case, the packet is on the RX path and skb->queue_mapping contains the RX queue index of the ingress device. If the ingress device has more RX queues than the egress device (dev) has TX queues, skb_get_queue_mapping(skb) will exceed dev->num_tx_queues. Add a check to avoid this situation since skb_get_tx_queue() does not clamp the index. This issue has also revealed that per queue visibility cannot be accurate and will be replaced later as a new feature.  While at it, add missing lock around qdisc_qstats_qlen_backlog(). The function __ioam6_fill_trace_data() is called from both softirq and process contexts, hence the use of spin_lock_bh() here.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-05-06 10:16:00 UTC"
                            }
                        ],
                        "log": [
                            "",
                            "  * jammy/linux-riscv-6.8: 6.8.0-137.137~22.04.1 -proposed tracker (LP: #2160835)",
                            "",
                            "  [ Ubuntu: 6.8.0-137.137 ]",
                            "",
                            "  * noble/linux: 6.8.0-137.137 -proposed tracker (LP: #2160836)",
                            "  * Packaging resync (LP: #1786013)",
                            "    - [Packaging] update annotations scripts",
                            "    - [Packaging] debian.master/dkms-versions -- update from kernel-versions",
                            "      (main/s2026.06.22)",
                            "  * CVE-2026-53225",
                            "    - sctp: fix uninit-value in __sctp_rcv_asconf_lookup()",
                            "  * CVE-2026-53228",
                            "    - ipv6: sit: reload inner IPv6 header after GSO offloads",
                            "  * CVE-2026-46242",
                            "    - eventpoll: fix ep_remove struct eventpoll / struct file UAF",
                            "  * CVE-2026-46331",
                            "    - net/sched: fix pedit partial COW leading to page cache corruption",
                            "  * CVE-2026-53212",
                            "    - netfilter: nft_tunnel: fix use-after-free on object destroy",
                            "  * CVE-2026-53359",
                            "    - KVM: x86: Fix shadow paging use-after-free due to unexpected role",
                            "  * CVE-2026-53151",
                            "    - rxrpc: Fix the ACK parser to extract the SACK table for parsing",
                            "  * CVE-2026-52924",
                            "    - sctp: purge outqueue on stale COOKIE-ECHO handling",
                            "  * CVE-2026-53215",
                            "    - net: mvpp2: refill RX buffers before XDP or skb use",
                            "  * CVE-2026-53176",
                            "    - IB/isert: Reject login PDUs shorter than ISER_HEADERS_LEN",
                            "  * CVE-2026-52931",
                            "    - batman-adv: tp_meter: avoid use of uninit sender vars",
                            "  * CVE-2026-52914",
                            "    - batman-adv: fix fragment reassembly length accounting",
                            "  * CVE-2026-46325",
                            "    - RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE",
                            "  * CVE-2026-43465",
                            "    - net/mlx5e: RX, Fix XDP multi-buf frag counting for striding RQ",
                            "  * CVE-2026-43198",
                            "    - tcp: fix potential race in tcp_v6_syn_recv_sock()",
                            "  * CVE-2026-43197",
                            "    - netconsole: avoid OOB reads, msg is not nul-terminated",
                            "  * CVE-2026-43083",
                            "    - net: ioam6: fix OOB and missing lock",
                            ""
                        ],
                        "package": "linux-riscv-6.8",
                        "version": "6.8.0-137.137~22.04.1",
                        "urgency": "medium",
                        "distributions": "jammy",
                        "launchpad_bugs_fixed": [
                            2160835,
                            2160836,
                            1786013
                        ],
                        "author": "Alessio Faina <alessio.faina@canonical.com>",
                        "date": "Wed, 22 Jul 2026 10:15:10 +0200"
                    }
                ],
                "notes": "linux-modules-6.8.0-137-generic version '6.8.0-137.137~22.04.1' (source package linux-riscv-6.8 version '6.8.0-137.137~22.04.1') was added. linux-modules-6.8.0-137-generic version '6.8.0-137.137~22.04.1' has the same source package name, linux-riscv-6.8, as removed package linux-headers-6.8.0-136-generic. As such we can use the source package version of the removed package, '6.8.0-136.136~22.04.3', as the starting point in our changelog diff. Kernel packages are an example of where the binary package name changes for the same source package. Using the removed package source package version as our starting point means we can still get meaningful changelog diffs even for what appears to be a new package.",
                "is_version_downgrade": false
            },
            {
                "name": "linux-riscv-6.8-headers-6.8.0-137",
                "from_version": {
                    "source_package_name": "linux-riscv-6.8",
                    "source_package_version": "6.8.0-136.136~22.04.3",
                    "version": null
                },
                "to_version": {
                    "source_package_name": "linux-riscv-6.8",
                    "source_package_version": "6.8.0-137.137~22.04.1",
                    "version": "6.8.0-137.137~22.04.1"
                },
                "cves": [
                    {
                        "cve": "CVE-2026-53225",
                        "url": "https://ubuntu.com/security/CVE-2026-53225",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  sctp: fix uninit-value in __sctp_rcv_asconf_lookup()  __sctp_rcv_asconf_lookup() in net/sctp/input.c only checks that the ASCONF chunk can hold the ADDIP header and a parameter header, then calls af->from_addr_param(), which reads the full address (16 bytes for IPv6) trusting the parameter's declared length.  An unauthenticated peer can send a truncated trailing ASCONF chunk that declares an IPv6 address parameter but stops after the 4-byte parameter header; reached from the no-association lookup path, from_addr_param() then reads uninitialized bytes past the parameter.  Impact: an unauthenticated SCTP peer makes the receive path read up to 16 bytes of uninitialized memory past a truncated ASCONF address parameter.  The sibling __sctp_rcv_init_lookup() bounds parameters with sctp_walk_params(); this path open-codes the fetch and omits the bound. Verify the whole address parameter lies within the chunk before from_addr_param() reads it, the same class of fix as commit 51e5ad549c43 (\"net: sctp: fix KMSAN uninit-value in sctp_inq_pop\").",
                        "cve_priority": "negligible",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53228",
                        "url": "https://ubuntu.com/security/CVE-2026-53228",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  ipv6: sit: reload inner IPv6 header after GSO offloads  ipip6_tunnel_xmit() caches the inner IPv6 header pointer at function entry and continues using it after iptunnel_handle_offloads().  For GSO skbs, iptunnel_handle_offloads() calls skb_header_unclone(). When the skb header is cloned, skb_header_unclone() can call pskb_expand_head(), which may move the skb head. The pskb_expand_head() contract requires pointers into the skb header to be reloaded after the call.  If the later skb_realloc_headroom() branch is not taken, SIT uses the stale iph6 pointer to read the inner hop limit and DS field. That can read from a freed skb head after the old head's remaining clone is released.  Reload iph6 after the offload helper succeeds and before subsequent reads from the inner IPv6 header. Keep the existing reload after skb_realloc_headroom(), since that branch can also replace the skb.",
                        "cve_priority": "medium",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-46242",
                        "url": "https://ubuntu.com/security/CVE-2026-46242",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  eventpoll: fix ep_remove struct eventpoll / struct file UAF  ep_remove() (via ep_remove_file()) cleared file->f_ep under file->f_lock but then kept using @file inside the critical section (is_file_epoll(), hlist_del_rcu() through the head, spin_unlock). A concurrent __fput() taking the eventpoll_release() fastpath in that window observed the transient NULL, skipped eventpoll_release_file() and ran to f_op->release / file_free().  For the epoll-watches-epoll case, f_op->release is ep_eventpoll_release() -> ep_clear_and_put() -> ep_free(), which kfree()s the watched struct eventpoll. Its embedded ->refs hlist_head is exactly where epi->fllink.pprev points, so the subsequent hlist_del_rcu()'s \"*pprev = next\" scribbles into freed kmalloc-192 memory.  In addition, struct file is SLAB_TYPESAFE_BY_RCU, so the slot backing @file could be recycled by alloc_empty_file() -- reinitializing f_lock and f_ep -- while ep_remove() is still nominally inside that lock. The upshot is an attacker-controllable kmem_cache_free() against the wrong slab cache.  Pin @file via epi_fget() at the top of ep_remove() and gate the critical section on the pin succeeding. With the pin held @file cannot reach refcount zero, which holds __fput() off and transitively keeps the watched struct eventpoll alive across the hlist_del_rcu() and the f_lock use, closing both UAFs.  If the pin fails @file has already reached refcount zero and its __fput() is in flight. Because we bailed before clearing f_ep, that path takes the eventpoll_release() slow path into eventpoll_release_file() and blocks on ep->mtx until the waiter side's ep_clear_and_put() drops it. The bailed epi's share of ep->refcount stays intact, so the trailing ep_refcount_dec_and_test() in ep_clear_and_put() cannot free the eventpoll out from under eventpoll_release_file(); the orphaned epi is then cleaned up there.  A successful pin also proves we are not racing eventpoll_release_file() on this epi, so drop the now-redundant re-check of epi->dying under f_lock. The cheap lockless READ_ONCE(epi->dying) fast-path bailout stays.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-05-30 13:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-46331",
                        "url": "https://ubuntu.com/security/CVE-2026-46331",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net/sched: fix pedit partial COW leading to page cache corruption  tcf_pedit_act() computes the COW range for skb_ensure_writable() once before the key loop using tcfp_off_max_hint, but the hint does not account for the runtime header offset added by typed keys. This can leave part of the write region un-COW'd.  Fix by moving skb_ensure_writable() inside the per-key loop where the actual write offset is known, and add overflow checking on the offset arithmetic. For negative offsets (e.g. Ethernet header edits at ingress), use skb_cow() to COW the headroom instead. Guard offset_valid() against INT_MIN, where negation is undefined.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-16 08:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53212",
                        "url": "https://ubuntu.com/security/CVE-2026-53212",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  netfilter: nft_tunnel: fix use-after-free on object destroy  nft_tunnel_obj_destroy() calls metadata_dst_free() which directly kfree()s the metadata_dst, ignoring the dst_entry refcount. Packets that took a reference via dst_hold() in nft_tunnel_obj_eval() and are still queued (e.g. in a netem qdisc) are left with a dangling pointer. When these packets are eventually dequeued, dst_release() operates on freed memory.  Replace metadata_dst_free() with dst_release() so the metadata_dst is freed only after all references are dropped. The dst subsystem already handles metadata_dst cleanup in dst_destroy() when DST_METADATA is set.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53359",
                        "url": "https://ubuntu.com/security/CVE-2026-53359",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  KVM: x86: Fix shadow paging use-after-free due to unexpected role  Commit 0cb2af2ea66ad (\"KVM: x86: Fix shadow paging use-after-free due to unexpected GFN\") fixed a shadow paging mismatch between stored and computed GFNs; the bug could be triggered by changing a PDE mapping from outside the guest, and then deleting a memslot.  The rmap_remove() call would miss entries created after the PDE change because the GFN of the leaf SPTE does not match the GFN of the struct kvm_mmu_page.  A similar hole however remains if the modified PDE points to a non-leaf page.  In this case the gfn can be made to match, but the role does not match: the original large 2MB page creates a kvm_mmu_page with direct=1, while the new 4KB needs a kvm_mmu_page with direct=0.  However, kvm_mmu_get_child_sp() does not compare the role, and therefore reuses the page.  The next step is installing a leaf (4KB) SPTE on the new path which records an rmap entry under the gfn resolved by the walk.  But when that child is zapped its parent kvm_mmu_page has direct=1 and kvm_mmu_page_get_gfn() computes the gfn for the 4KB page as sp->gfn + index instead of using sp->shadowed_translation[] (or sp->gfns[] in older kernels).  It therefore fails to remove the recorded entry.  When the memslot is dropped the shadow page is freed but the rmap entry survives, as in the scenario that was already fixed.  Code that later walks that gfn (dirty logging, MMU notifier invalidation, and so on) dereferences an sptep that lies in the freed page, causing the use-after-free.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-07-04 12:17:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53151",
                        "url": "https://ubuntu.com/security/CVE-2026-53151",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  rxrpc: Fix the ACK parser to extract the SACK table for parsing  Fix modification of the received skbuff in rxrpc_input_soft_acks() and a potential incorrect access of the buffer in a fragmented UDP packet (the packet would probably have to be deliberately pre-generated as fragmented) when AF_RXRPC tries to extract the contents of the SACK table by copying out the contents of the SACK table into a buffer before attempting to parse  AF_RXRPC assumes that it can just call skb_condense() and then validly access the SACK table from skb->data and that it will be a flat buffer - but skb_condense() can silently fail to do anything under some circumstances.  Note that whilst rxrpc_input_soft_acks() should be able to parse extended ACKs, the rest of AF_RXRPC doesn't currently support that.  Further, there's then no need to call skb_condense() in rxrpc_input_ack(), so don't.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-52924",
                        "url": "https://ubuntu.com/security/CVE-2026-52924",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  sctp: purge outqueue on stale COOKIE-ECHO handling  sctp_stream_update() is only invoked when the association is moved into COOKIE_WAIT during association setup/reconfiguration. In this path, the outbound stream scheduler state (stream->out_curr) is expected to be clean, since no user data should have been transmitted yet unless the state machine has already partially progressed.  However, a corner case exists in sctp_sf_do_5_2_6_stale(): when a Stale Cookie ERROR is received, the association is rolled back from COOKIE_ECHOED to COOKIE_WAIT. In this scenario, user data may already have been queued and even bundled with the COOKIE-ECHO chunk.  During the rollback, sctp_stream_update() frees the old stream table and installs a new one, but it does not invalidate stream->out_curr. As a result, out_curr may still point to a freed sctp_stream_out entry from the previous stream state.  Later, SCTP scheduler dequeue paths (FCFS, RR, PRIO, etc.) rely on stream->out_curr->ext, which can lead to use-after-free once the old stream state has been released via sctp_stream_free().  This results in crashes such as (reported by Yuqi):    BUG: KASAN: slab-use-after-free in sctp_sched_fcfs_dequeue+0x13a/0x140   Read of size 8 at addr ff1100004d4d3208 by task mini_poc/9312   CPU: 1 UID: 1001 PID: 9312 Comm: mini_poc Not tainted      7.1.0-rc1-00305-gbd3a4795d574 #5 PREEMPT(full)    sctp_sched_fcfs_dequeue+0x13a/0x140    sctp_outq_flush+0x1603/0x33e0    sctp_do_sm+0x31c9/0x5d30    sctp_assoc_bh_rcv+0x392/0x6f0    sctp_inq_push+0x1db/0x270    sctp_rcv+0x138d/0x3c10  Fix this by fully purging the association outqueue when handling the Stale Cookie case. This ensures all pending transmit and retransmit state is dropped, and any scheduler cached pointers are invalidated, making it safe to rebuild stream state during COOKIE_WAIT restart.  Updating only stream->out_curr would be insufficient, since queued and retransmittable data would still reference the old stream state and trigger later use-after-free in dequeue paths.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-24 08:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53215",
                        "url": "https://ubuntu.com/security/CVE-2026-53215",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net: mvpp2: refill RX buffers before XDP or skb use  The RX error path returns the current descriptor buffer to the hardware BM pool. That is only valid while the driver still owns the buffer.  mvpp2_rx_refill() can fail after the current buffer has been handed to XDP or attached to an skb. In those cases mvpp2_run_xdp() may have recycled, redirected, or queued the page for XDP_TX, and an skb free also retires the data buffer. Returning such a buffer to BM lets hardware DMA into memory that is no longer owned by the RX ring.  Refill the BM pool before handing the current buffer to XDP or to the skb. If the allocation fails there, drop the packet and return the still-owned current buffer to BM, preserving the pool depth. Once the refill succeeds, later local drops retire/free the current buffer instead of returning it to BM.",
                        "cve_priority": "critical",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-53176",
                        "url": "https://ubuntu.com/security/CVE-2026-53176",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  IB/isert: Reject login PDUs shorter than ISER_HEADERS_LEN  In drivers/infiniband/ulp/isert/ib_isert.c, isert_login_recv_done() computes the login request payload length as wc->byte_len minus ISER_HEADERS_LEN with no lower bound, and login_req_len is a signed int. A remote iSER initiator can post a login Send work request carrying fewer than ISER_HEADERS_LEN (76) bytes, so the subtraction underflows and login_req_len becomes negative.  isert_rx_login_req() then reads that negative length back into a signed int, takes size = min(rx_buflen, MAX_KEY_VALUE_PAIRS), and because the min() is signed it keeps the negative value; the value is then passed as the memcpy() length and sign-extended to a multi-gigabyte size_t. The copy into the 8192-byte login->req_buf runs far out of bounds and faults, crashing the target node. The login phase precedes iSCSI authentication, so no credentials are required to reach this path.  Reject any login PDU shorter than ISER_HEADERS_LEN before the subtraction, mirroring the existing early return on a failed work completion, so login_req_len can never go negative. The upper bound was already safe: a posted login buffer cannot deliver more than ISER_RX_PAYLOAD_SIZE, so the difference stays at or below MAX_KEY_VALUE_PAIRS and the existing min() clamps it; only the missing lower bound needs to be added.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-25 09:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-52931",
                        "url": "https://ubuntu.com/security/CVE-2026-52931",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  batman-adv: tp_meter: avoid use of uninit sender vars  batadv_tp_recv_ack() and batadv_tp_stop() are only valid for tp_vars in the BATADV_TP_SENDER role. When called with a BATADV_TP_RECEIVER role, it proceeds to read sender-only members that were never initialized, leading to undefined behavior.  This can be triggered when a node that is currently acting as a receiver in an ongoing tp_meter session receives a malicious ACK packet.  Guard against this by checking tp_vars->role immediately after the lookup and bailing out if it is not BATADV_TP_SENDER, before any of those members are accessed.",
                        "cve_priority": "medium",
                        "cve_public_date": "2026-06-24 08:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-52914",
                        "url": "https://ubuntu.com/security/CVE-2026-52914",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  batman-adv: fix fragment reassembly length accounting  batman-adv keeps a running payload length for queued fragments and uses it to validate a fragment chain before reassembly.  That accounting currently allows the accumulated fragment length to be truncated during updates. As a result, malformed fragment chains can bypass the intended validation and drive reassembly with inconsistent length state, leading to a local denial of service.  Fix the accounting by storing the accumulated length in a length-typed field and rejecting update overflows before the existing validation logic runs.  The fix was verified against the original reproducer and against valid fragment reassembly paths.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-06-24 08:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-46325",
                        "url": "https://ubuntu.com/security/CVE-2026-46325",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE  The current implementation incorrectly handles memory regions (MRs) with page sizes different from the system PAGE_SIZE. The core issue is that rxe_set_page() is called with mr->page_size step increments, but the page_list stores individual struct page pointers, each representing PAGE_SIZE of memory.  ib_sg_to_page() has ensured that when i>=1 either a) SG[i-1].dma_end and SG[i].dma_addr are contiguous or b) SG[i-1].dma_end and SG[i].dma_addr are mr->page_size aligned.  This leads to incorrect iova-to-va conversion in scenarios:  1) page_size < PAGE_SIZE (e.g., MR: 4K, system: 64K):    ibmr->iova = 0x181800    sg[0]: dma_addr=0x181800, len=0x800    sg[1]: dma_addr=0x173000, len=0x1000     Access iova = 0x181800 + 0x810 = 0x182010    Expected VA: 0x173010 (second SG, offset 0x10)    Before fix:      - index = (0x182010 >> 12) - (0x181800 >> 12) = 1      - page_offset = 0x182010 & 0xFFF = 0x10      - xarray[1] stores system page base 0x170000      - Resulting VA: 0x170000 + 0x10 = 0x170010 (wrong)  2) page_size > PAGE_SIZE (e.g., MR: 64K, system: 4K):    ibmr->iova = 0x18f800    sg[0]: dma_addr=0x18f800, len=0x800    sg[1]: dma_addr=0x170000, len=0x1000     Access iova = 0x18f800 + 0x810 = 0x190010    Expected VA: 0x170010 (second SG, offset 0x10)    Before fix:      - index = (0x190010 >> 16) - (0x18f800 >> 16) = 1      - page_offset = 0x190010 & 0xFFFF = 0x10      - xarray[1] stores system page for dma_addr 0x170000      - Resulting VA: system page of 0x170000 + 0x10 = 0x170010 (wrong)  Yi Zhang reported a kernel panic[1] years ago related to this defect.  Solution: 1. Replace xarray with pre-allocated rxe_mr_page array for sequential    indexing (all MR page indices are contiguous) 2. Each rxe_mr_page stores both struct page* and offset within the    system page 3. Handle MR page_size != PAGE_SIZE relationships:    - page_size > PAGE_SIZE: Split MR pages into multiple system pages    - page_size <= PAGE_SIZE: Store offset within system page 4. Add boundary checks and compatibility validation  This ensures correct iova-to-va conversion regardless of MR page size and system PAGE_SIZE relationship, while improving performance through array-based sequential access.  Tests on 4K and 64K PAGE_SIZE hosts: - rdma-core/pytests   $ ./build/bin/run_tests.py  --dev eth0_rxe - blktest:   $ TIMEOUT=30 QUICK_RUN=1 USE_RXE=1 NVMET_TRTYPES=rdma ./check nvme srp rnbd  [1] https://lore.kernel.org/all/CAHj4cs9XRqE25jyVw9rj9YugffLn5+f=1znaBEnu1usLOciD+g@mail.gmail.com/T/",
                        "cve_priority": "low",
                        "cve_public_date": "2026-06-09 14:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-43465",
                        "url": "https://ubuntu.com/security/CVE-2026-43465",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net/mlx5e: RX, Fix XDP multi-buf frag counting for striding RQ  XDP multi-buf programs can modify the layout of the XDP buffer when the program calls bpf_xdp_pull_data() or bpf_xdp_adjust_tail(). The referenced commit in the fixes tag corrected the assumption in the mlx5 driver that the XDP buffer layout doesn't change during a program execution. However, this fix introduced another issue: the dropped fragments still need to be counted on the driver side to avoid page fragment reference counting issues.  The issue was discovered by the drivers/net/xdp.py selftest, more specifically the test_xdp_native_tx_mb: - The mlx5 driver allocates a page_pool page and initializes it with   a frag counter of 64 (pp_ref_count=64) and the internal frag counter   to 0. - The test sends one packet with no payload. - On RX (mlx5e_skb_from_cqe_mpwrq_nonlinear()), mlx5 configures the XDP   buffer with the packet data starting in the first fragment which is the   page mentioned above. - The XDP program runs and calls bpf_xdp_pull_data() which moves the   header into the linear part of the XDP buffer. As the packet doesn't   contain more data, the program drops the tail fragment since it no   longer contains any payload (pp_ref_count=63). - mlx5 device skips counting this fragment. Internal frag counter   remains 0. - mlx5 releases all 64 fragments of the page but page pp_ref_count is   63 => negative reference counting error.  Resulting splat during the test:    WARNING: CPU: 0 PID: 188225 at ./include/net/page_pool/helpers.h:297 mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]   Modules linked in: [...]   CPU: 0 UID: 0 PID: 188225 Comm: ip Not tainted 6.18.0-rc7_for_upstream_min_debug_2025_12_08_11_44 #1 NONE   Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014   RIP: 0010:mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]   [...]   Call Trace:    <TASK>    mlx5e_free_rx_mpwqe+0x20a/0x250 [mlx5_core]    mlx5e_dealloc_rx_mpwqe+0x37/0xb0 [mlx5_core]    mlx5e_free_rx_descs+0x11a/0x170 [mlx5_core]    mlx5e_close_rq+0x78/0xa0 [mlx5_core]    mlx5e_close_queues+0x46/0x2a0 [mlx5_core]    mlx5e_close_channel+0x24/0x90 [mlx5_core]    mlx5e_close_channels+0x5d/0xf0 [mlx5_core]    mlx5e_safe_switch_params+0x2ec/0x380 [mlx5_core]    mlx5e_change_mtu+0x11d/0x490 [mlx5_core]    mlx5e_change_nic_mtu+0x19/0x30 [mlx5_core]    netif_set_mtu_ext+0xfc/0x240    do_setlink.isra.0+0x226/0x1100    rtnl_newlink+0x7a9/0xba0    rtnetlink_rcv_msg+0x220/0x3c0    netlink_rcv_skb+0x4b/0xf0    netlink_unicast+0x255/0x380    netlink_sendmsg+0x1f3/0x420    __sock_sendmsg+0x38/0x60    ____sys_sendmsg+0x1e8/0x240    ___sys_sendmsg+0x7c/0xb0    [...]    __sys_sendmsg+0x5f/0xb0    do_syscall_64+0x55/0xc70  The problem applies for XDP_PASS as well which is handled in a different code path in the driver.  This patch fixes the issue by doing page frag counting on all the original XDP buffer fragments for all relevant XDP actions (XDP_TX , XDP_REDIRECT and XDP_PASS). This is basically reverting to the original counting before the commit in the fixes tag.  As frag_page is still pointing to the original tail, the nr_frags parameter to xdp_update_skb_frags_info() needs to be calculated in a different way to reflect the new nr_frags.",
                        "cve_priority": "low",
                        "cve_public_date": "2026-05-08 15:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-43198",
                        "url": "https://ubuntu.com/security/CVE-2026-43198",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  tcp: fix potential race in tcp_v6_syn_recv_sock()  Code in tcp_v6_syn_recv_sock() after the call to tcp_v4_syn_recv_sock() is done too late.  After tcp_v4_syn_recv_sock(), the child socket is already visible from TCP ehash table and other cpus might use it.  Since newinet->pinet6 is still pointing to the listener ipv6_pinfo bad things can happen as syzbot found.  Move the problematic code in tcp_v6_mapped_child_init() and call this new helper from tcp_v4_syn_recv_sock() before the ehash insertion.  This allows the removal of one tcp_sync_mss(), since tcp_v4_syn_recv_sock() will call it with the correct context.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-05-06 12:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-43197",
                        "url": "https://ubuntu.com/security/CVE-2026-43197",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  netconsole: avoid OOB reads, msg is not nul-terminated  msg passed to netconsole from the console subsystem is not guaranteed to be nul-terminated. Before recent commit 7eab73b18630 (\"netconsole: convert to NBCON console infrastructure\") the message would be placed in printk_shared_pbufs, a static global buffer, so KASAN had harder time catching OOB accesses. Now we see:      printk: console [netcon_ext0] enabled     BUG: KASAN: slab-out-of-bounds in string+0x1f7/0x240     Read of size 1 at addr ffff88813b6d4c00 by task pr/netcon_ext0/594      CPU: 65 UID: 0 PID: 594 Comm: pr/netcon_ext0 Not tainted 6.19.0-11754-g4246fd6547c9     Call Trace:      kasan_report+0xe4/0x120      string+0x1f7/0x240      vsnprintf+0x655/0xba0      scnprintf+0xba/0x120      netconsole_write+0x3fe/0xa10      nbcon_emit_next_record+0x46e/0x860      nbcon_kthread_func+0x623/0x750      Allocated by task 1:      nbcon_alloc+0x1ea/0x450      register_console+0x26b/0xe10      init_netconsole+0xbb0/0xda0      The buggy address belongs to the object at ffff88813b6d4000                 which belongs to the cache kmalloc-4k of size 4096     The buggy address is located 0 bytes to the right of                 allocated 3072-byte region [ffff88813b6d4000, ffff88813b6d4c00)",
                        "cve_priority": "negligible",
                        "cve_public_date": "2026-05-06 12:16:00 UTC"
                    },
                    {
                        "cve": "CVE-2026-43083",
                        "url": "https://ubuntu.com/security/CVE-2026-43083",
                        "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net: ioam6: fix OOB and missing lock  When trace->type.bit6 is set:      if (trace->type.bit6) {         ...         queue = skb_get_tx_queue(dev, skb);         qdisc = rcu_dereference(queue->qdisc);  This code can lead to an out-of-bounds access of the dev->_tx[] array when is_input is true. In such a case, the packet is on the RX path and skb->queue_mapping contains the RX queue index of the ingress device. If the ingress device has more RX queues than the egress device (dev) has TX queues, skb_get_queue_mapping(skb) will exceed dev->num_tx_queues. Add a check to avoid this situation since skb_get_tx_queue() does not clamp the index. This issue has also revealed that per queue visibility cannot be accurate and will be replaced later as a new feature.  While at it, add missing lock around qdisc_qstats_qlen_backlog(). The function __ioam6_fill_trace_data() is called from both softirq and process contexts, hence the use of spin_lock_bh() here.",
                        "cve_priority": "high",
                        "cve_public_date": "2026-05-06 10:16:00 UTC"
                    }
                ],
                "launchpad_bugs_fixed": [
                    2160835,
                    2160836,
                    1786013
                ],
                "changes": [
                    {
                        "cves": [
                            {
                                "cve": "CVE-2026-53225",
                                "url": "https://ubuntu.com/security/CVE-2026-53225",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  sctp: fix uninit-value in __sctp_rcv_asconf_lookup()  __sctp_rcv_asconf_lookup() in net/sctp/input.c only checks that the ASCONF chunk can hold the ADDIP header and a parameter header, then calls af->from_addr_param(), which reads the full address (16 bytes for IPv6) trusting the parameter's declared length.  An unauthenticated peer can send a truncated trailing ASCONF chunk that declares an IPv6 address parameter but stops after the 4-byte parameter header; reached from the no-association lookup path, from_addr_param() then reads uninitialized bytes past the parameter.  Impact: an unauthenticated SCTP peer makes the receive path read up to 16 bytes of uninitialized memory past a truncated ASCONF address parameter.  The sibling __sctp_rcv_init_lookup() bounds parameters with sctp_walk_params(); this path open-codes the fetch and omits the bound. Verify the whole address parameter lies within the chunk before from_addr_param() reads it, the same class of fix as commit 51e5ad549c43 (\"net: sctp: fix KMSAN uninit-value in sctp_inq_pop\").",
                                "cve_priority": "negligible",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53228",
                                "url": "https://ubuntu.com/security/CVE-2026-53228",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  ipv6: sit: reload inner IPv6 header after GSO offloads  ipip6_tunnel_xmit() caches the inner IPv6 header pointer at function entry and continues using it after iptunnel_handle_offloads().  For GSO skbs, iptunnel_handle_offloads() calls skb_header_unclone(). When the skb header is cloned, skb_header_unclone() can call pskb_expand_head(), which may move the skb head. The pskb_expand_head() contract requires pointers into the skb header to be reloaded after the call.  If the later skb_realloc_headroom() branch is not taken, SIT uses the stale iph6 pointer to read the inner hop limit and DS field. That can read from a freed skb head after the old head's remaining clone is released.  Reload iph6 after the offload helper succeeds and before subsequent reads from the inner IPv6 header. Keep the existing reload after skb_realloc_headroom(), since that branch can also replace the skb.",
                                "cve_priority": "medium",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-46242",
                                "url": "https://ubuntu.com/security/CVE-2026-46242",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  eventpoll: fix ep_remove struct eventpoll / struct file UAF  ep_remove() (via ep_remove_file()) cleared file->f_ep under file->f_lock but then kept using @file inside the critical section (is_file_epoll(), hlist_del_rcu() through the head, spin_unlock). A concurrent __fput() taking the eventpoll_release() fastpath in that window observed the transient NULL, skipped eventpoll_release_file() and ran to f_op->release / file_free().  For the epoll-watches-epoll case, f_op->release is ep_eventpoll_release() -> ep_clear_and_put() -> ep_free(), which kfree()s the watched struct eventpoll. Its embedded ->refs hlist_head is exactly where epi->fllink.pprev points, so the subsequent hlist_del_rcu()'s \"*pprev = next\" scribbles into freed kmalloc-192 memory.  In addition, struct file is SLAB_TYPESAFE_BY_RCU, so the slot backing @file could be recycled by alloc_empty_file() -- reinitializing f_lock and f_ep -- while ep_remove() is still nominally inside that lock. The upshot is an attacker-controllable kmem_cache_free() against the wrong slab cache.  Pin @file via epi_fget() at the top of ep_remove() and gate the critical section on the pin succeeding. With the pin held @file cannot reach refcount zero, which holds __fput() off and transitively keeps the watched struct eventpoll alive across the hlist_del_rcu() and the f_lock use, closing both UAFs.  If the pin fails @file has already reached refcount zero and its __fput() is in flight. Because we bailed before clearing f_ep, that path takes the eventpoll_release() slow path into eventpoll_release_file() and blocks on ep->mtx until the waiter side's ep_clear_and_put() drops it. The bailed epi's share of ep->refcount stays intact, so the trailing ep_refcount_dec_and_test() in ep_clear_and_put() cannot free the eventpoll out from under eventpoll_release_file(); the orphaned epi is then cleaned up there.  A successful pin also proves we are not racing eventpoll_release_file() on this epi, so drop the now-redundant re-check of epi->dying under f_lock. The cheap lockless READ_ONCE(epi->dying) fast-path bailout stays.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-05-30 13:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-46331",
                                "url": "https://ubuntu.com/security/CVE-2026-46331",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net/sched: fix pedit partial COW leading to page cache corruption  tcf_pedit_act() computes the COW range for skb_ensure_writable() once before the key loop using tcfp_off_max_hint, but the hint does not account for the runtime header offset added by typed keys. This can leave part of the write region un-COW'd.  Fix by moving skb_ensure_writable() inside the per-key loop where the actual write offset is known, and add overflow checking on the offset arithmetic. For negative offsets (e.g. Ethernet header edits at ingress), use skb_cow() to COW the headroom instead. Guard offset_valid() against INT_MIN, where negation is undefined.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-16 08:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53212",
                                "url": "https://ubuntu.com/security/CVE-2026-53212",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  netfilter: nft_tunnel: fix use-after-free on object destroy  nft_tunnel_obj_destroy() calls metadata_dst_free() which directly kfree()s the metadata_dst, ignoring the dst_entry refcount. Packets that took a reference via dst_hold() in nft_tunnel_obj_eval() and are still queued (e.g. in a netem qdisc) are left with a dangling pointer. When these packets are eventually dequeued, dst_release() operates on freed memory.  Replace metadata_dst_free() with dst_release() so the metadata_dst is freed only after all references are dropped. The dst subsystem already handles metadata_dst cleanup in dst_destroy() when DST_METADATA is set.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53359",
                                "url": "https://ubuntu.com/security/CVE-2026-53359",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  KVM: x86: Fix shadow paging use-after-free due to unexpected role  Commit 0cb2af2ea66ad (\"KVM: x86: Fix shadow paging use-after-free due to unexpected GFN\") fixed a shadow paging mismatch between stored and computed GFNs; the bug could be triggered by changing a PDE mapping from outside the guest, and then deleting a memslot.  The rmap_remove() call would miss entries created after the PDE change because the GFN of the leaf SPTE does not match the GFN of the struct kvm_mmu_page.  A similar hole however remains if the modified PDE points to a non-leaf page.  In this case the gfn can be made to match, but the role does not match: the original large 2MB page creates a kvm_mmu_page with direct=1, while the new 4KB needs a kvm_mmu_page with direct=0.  However, kvm_mmu_get_child_sp() does not compare the role, and therefore reuses the page.  The next step is installing a leaf (4KB) SPTE on the new path which records an rmap entry under the gfn resolved by the walk.  But when that child is zapped its parent kvm_mmu_page has direct=1 and kvm_mmu_page_get_gfn() computes the gfn for the 4KB page as sp->gfn + index instead of using sp->shadowed_translation[] (or sp->gfns[] in older kernels).  It therefore fails to remove the recorded entry.  When the memslot is dropped the shadow page is freed but the rmap entry survives, as in the scenario that was already fixed.  Code that later walks that gfn (dirty logging, MMU notifier invalidation, and so on) dereferences an sptep that lies in the freed page, causing the use-after-free.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-07-04 12:17:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53151",
                                "url": "https://ubuntu.com/security/CVE-2026-53151",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  rxrpc: Fix the ACK parser to extract the SACK table for parsing  Fix modification of the received skbuff in rxrpc_input_soft_acks() and a potential incorrect access of the buffer in a fragmented UDP packet (the packet would probably have to be deliberately pre-generated as fragmented) when AF_RXRPC tries to extract the contents of the SACK table by copying out the contents of the SACK table into a buffer before attempting to parse  AF_RXRPC assumes that it can just call skb_condense() and then validly access the SACK table from skb->data and that it will be a flat buffer - but skb_condense() can silently fail to do anything under some circumstances.  Note that whilst rxrpc_input_soft_acks() should be able to parse extended ACKs, the rest of AF_RXRPC doesn't currently support that.  Further, there's then no need to call skb_condense() in rxrpc_input_ack(), so don't.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-52924",
                                "url": "https://ubuntu.com/security/CVE-2026-52924",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  sctp: purge outqueue on stale COOKIE-ECHO handling  sctp_stream_update() is only invoked when the association is moved into COOKIE_WAIT during association setup/reconfiguration. In this path, the outbound stream scheduler state (stream->out_curr) is expected to be clean, since no user data should have been transmitted yet unless the state machine has already partially progressed.  However, a corner case exists in sctp_sf_do_5_2_6_stale(): when a Stale Cookie ERROR is received, the association is rolled back from COOKIE_ECHOED to COOKIE_WAIT. In this scenario, user data may already have been queued and even bundled with the COOKIE-ECHO chunk.  During the rollback, sctp_stream_update() frees the old stream table and installs a new one, but it does not invalidate stream->out_curr. As a result, out_curr may still point to a freed sctp_stream_out entry from the previous stream state.  Later, SCTP scheduler dequeue paths (FCFS, RR, PRIO, etc.) rely on stream->out_curr->ext, which can lead to use-after-free once the old stream state has been released via sctp_stream_free().  This results in crashes such as (reported by Yuqi):    BUG: KASAN: slab-use-after-free in sctp_sched_fcfs_dequeue+0x13a/0x140   Read of size 8 at addr ff1100004d4d3208 by task mini_poc/9312   CPU: 1 UID: 1001 PID: 9312 Comm: mini_poc Not tainted      7.1.0-rc1-00305-gbd3a4795d574 #5 PREEMPT(full)    sctp_sched_fcfs_dequeue+0x13a/0x140    sctp_outq_flush+0x1603/0x33e0    sctp_do_sm+0x31c9/0x5d30    sctp_assoc_bh_rcv+0x392/0x6f0    sctp_inq_push+0x1db/0x270    sctp_rcv+0x138d/0x3c10  Fix this by fully purging the association outqueue when handling the Stale Cookie case. This ensures all pending transmit and retransmit state is dropped, and any scheduler cached pointers are invalidated, making it safe to rebuild stream state during COOKIE_WAIT restart.  Updating only stream->out_curr would be insufficient, since queued and retransmittable data would still reference the old stream state and trigger later use-after-free in dequeue paths.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-24 08:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53215",
                                "url": "https://ubuntu.com/security/CVE-2026-53215",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net: mvpp2: refill RX buffers before XDP or skb use  The RX error path returns the current descriptor buffer to the hardware BM pool. That is only valid while the driver still owns the buffer.  mvpp2_rx_refill() can fail after the current buffer has been handed to XDP or attached to an skb. In those cases mvpp2_run_xdp() may have recycled, redirected, or queued the page for XDP_TX, and an skb free also retires the data buffer. Returning such a buffer to BM lets hardware DMA into memory that is no longer owned by the RX ring.  Refill the BM pool before handing the current buffer to XDP or to the skb. If the allocation fails there, drop the packet and return the still-owned current buffer to BM, preserving the pool depth. Once the refill succeeds, later local drops retire/free the current buffer instead of returning it to BM.",
                                "cve_priority": "critical",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-53176",
                                "url": "https://ubuntu.com/security/CVE-2026-53176",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  IB/isert: Reject login PDUs shorter than ISER_HEADERS_LEN  In drivers/infiniband/ulp/isert/ib_isert.c, isert_login_recv_done() computes the login request payload length as wc->byte_len minus ISER_HEADERS_LEN with no lower bound, and login_req_len is a signed int. A remote iSER initiator can post a login Send work request carrying fewer than ISER_HEADERS_LEN (76) bytes, so the subtraction underflows and login_req_len becomes negative.  isert_rx_login_req() then reads that negative length back into a signed int, takes size = min(rx_buflen, MAX_KEY_VALUE_PAIRS), and because the min() is signed it keeps the negative value; the value is then passed as the memcpy() length and sign-extended to a multi-gigabyte size_t. The copy into the 8192-byte login->req_buf runs far out of bounds and faults, crashing the target node. The login phase precedes iSCSI authentication, so no credentials are required to reach this path.  Reject any login PDU shorter than ISER_HEADERS_LEN before the subtraction, mirroring the existing early return on a failed work completion, so login_req_len can never go negative. The upper bound was already safe: a posted login buffer cannot deliver more than ISER_RX_PAYLOAD_SIZE, so the difference stays at or below MAX_KEY_VALUE_PAIRS and the existing min() clamps it; only the missing lower bound needs to be added.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-25 09:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-52931",
                                "url": "https://ubuntu.com/security/CVE-2026-52931",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  batman-adv: tp_meter: avoid use of uninit sender vars  batadv_tp_recv_ack() and batadv_tp_stop() are only valid for tp_vars in the BATADV_TP_SENDER role. When called with a BATADV_TP_RECEIVER role, it proceeds to read sender-only members that were never initialized, leading to undefined behavior.  This can be triggered when a node that is currently acting as a receiver in an ongoing tp_meter session receives a malicious ACK packet.  Guard against this by checking tp_vars->role immediately after the lookup and bailing out if it is not BATADV_TP_SENDER, before any of those members are accessed.",
                                "cve_priority": "medium",
                                "cve_public_date": "2026-06-24 08:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-52914",
                                "url": "https://ubuntu.com/security/CVE-2026-52914",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  batman-adv: fix fragment reassembly length accounting  batman-adv keeps a running payload length for queued fragments and uses it to validate a fragment chain before reassembly.  That accounting currently allows the accumulated fragment length to be truncated during updates. As a result, malformed fragment chains can bypass the intended validation and drive reassembly with inconsistent length state, leading to a local denial of service.  Fix the accounting by storing the accumulated length in a length-typed field and rejecting update overflows before the existing validation logic runs.  The fix was verified against the original reproducer and against valid fragment reassembly paths.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-06-24 08:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-46325",
                                "url": "https://ubuntu.com/security/CVE-2026-46325",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE  The current implementation incorrectly handles memory regions (MRs) with page sizes different from the system PAGE_SIZE. The core issue is that rxe_set_page() is called with mr->page_size step increments, but the page_list stores individual struct page pointers, each representing PAGE_SIZE of memory.  ib_sg_to_page() has ensured that when i>=1 either a) SG[i-1].dma_end and SG[i].dma_addr are contiguous or b) SG[i-1].dma_end and SG[i].dma_addr are mr->page_size aligned.  This leads to incorrect iova-to-va conversion in scenarios:  1) page_size < PAGE_SIZE (e.g., MR: 4K, system: 64K):    ibmr->iova = 0x181800    sg[0]: dma_addr=0x181800, len=0x800    sg[1]: dma_addr=0x173000, len=0x1000     Access iova = 0x181800 + 0x810 = 0x182010    Expected VA: 0x173010 (second SG, offset 0x10)    Before fix:      - index = (0x182010 >> 12) - (0x181800 >> 12) = 1      - page_offset = 0x182010 & 0xFFF = 0x10      - xarray[1] stores system page base 0x170000      - Resulting VA: 0x170000 + 0x10 = 0x170010 (wrong)  2) page_size > PAGE_SIZE (e.g., MR: 64K, system: 4K):    ibmr->iova = 0x18f800    sg[0]: dma_addr=0x18f800, len=0x800    sg[1]: dma_addr=0x170000, len=0x1000     Access iova = 0x18f800 + 0x810 = 0x190010    Expected VA: 0x170010 (second SG, offset 0x10)    Before fix:      - index = (0x190010 >> 16) - (0x18f800 >> 16) = 1      - page_offset = 0x190010 & 0xFFFF = 0x10      - xarray[1] stores system page for dma_addr 0x170000      - Resulting VA: system page of 0x170000 + 0x10 = 0x170010 (wrong)  Yi Zhang reported a kernel panic[1] years ago related to this defect.  Solution: 1. Replace xarray with pre-allocated rxe_mr_page array for sequential    indexing (all MR page indices are contiguous) 2. Each rxe_mr_page stores both struct page* and offset within the    system page 3. Handle MR page_size != PAGE_SIZE relationships:    - page_size > PAGE_SIZE: Split MR pages into multiple system pages    - page_size <= PAGE_SIZE: Store offset within system page 4. Add boundary checks and compatibility validation  This ensures correct iova-to-va conversion regardless of MR page size and system PAGE_SIZE relationship, while improving performance through array-based sequential access.  Tests on 4K and 64K PAGE_SIZE hosts: - rdma-core/pytests   $ ./build/bin/run_tests.py  --dev eth0_rxe - blktest:   $ TIMEOUT=30 QUICK_RUN=1 USE_RXE=1 NVMET_TRTYPES=rdma ./check nvme srp rnbd  [1] https://lore.kernel.org/all/CAHj4cs9XRqE25jyVw9rj9YugffLn5+f=1znaBEnu1usLOciD+g@mail.gmail.com/T/",
                                "cve_priority": "low",
                                "cve_public_date": "2026-06-09 14:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-43465",
                                "url": "https://ubuntu.com/security/CVE-2026-43465",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net/mlx5e: RX, Fix XDP multi-buf frag counting for striding RQ  XDP multi-buf programs can modify the layout of the XDP buffer when the program calls bpf_xdp_pull_data() or bpf_xdp_adjust_tail(). The referenced commit in the fixes tag corrected the assumption in the mlx5 driver that the XDP buffer layout doesn't change during a program execution. However, this fix introduced another issue: the dropped fragments still need to be counted on the driver side to avoid page fragment reference counting issues.  The issue was discovered by the drivers/net/xdp.py selftest, more specifically the test_xdp_native_tx_mb: - The mlx5 driver allocates a page_pool page and initializes it with   a frag counter of 64 (pp_ref_count=64) and the internal frag counter   to 0. - The test sends one packet with no payload. - On RX (mlx5e_skb_from_cqe_mpwrq_nonlinear()), mlx5 configures the XDP   buffer with the packet data starting in the first fragment which is the   page mentioned above. - The XDP program runs and calls bpf_xdp_pull_data() which moves the   header into the linear part of the XDP buffer. As the packet doesn't   contain more data, the program drops the tail fragment since it no   longer contains any payload (pp_ref_count=63). - mlx5 device skips counting this fragment. Internal frag counter   remains 0. - mlx5 releases all 64 fragments of the page but page pp_ref_count is   63 => negative reference counting error.  Resulting splat during the test:    WARNING: CPU: 0 PID: 188225 at ./include/net/page_pool/helpers.h:297 mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]   Modules linked in: [...]   CPU: 0 UID: 0 PID: 188225 Comm: ip Not tainted 6.18.0-rc7_for_upstream_min_debug_2025_12_08_11_44 #1 NONE   Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014   RIP: 0010:mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]   [...]   Call Trace:    <TASK>    mlx5e_free_rx_mpwqe+0x20a/0x250 [mlx5_core]    mlx5e_dealloc_rx_mpwqe+0x37/0xb0 [mlx5_core]    mlx5e_free_rx_descs+0x11a/0x170 [mlx5_core]    mlx5e_close_rq+0x78/0xa0 [mlx5_core]    mlx5e_close_queues+0x46/0x2a0 [mlx5_core]    mlx5e_close_channel+0x24/0x90 [mlx5_core]    mlx5e_close_channels+0x5d/0xf0 [mlx5_core]    mlx5e_safe_switch_params+0x2ec/0x380 [mlx5_core]    mlx5e_change_mtu+0x11d/0x490 [mlx5_core]    mlx5e_change_nic_mtu+0x19/0x30 [mlx5_core]    netif_set_mtu_ext+0xfc/0x240    do_setlink.isra.0+0x226/0x1100    rtnl_newlink+0x7a9/0xba0    rtnetlink_rcv_msg+0x220/0x3c0    netlink_rcv_skb+0x4b/0xf0    netlink_unicast+0x255/0x380    netlink_sendmsg+0x1f3/0x420    __sock_sendmsg+0x38/0x60    ____sys_sendmsg+0x1e8/0x240    ___sys_sendmsg+0x7c/0xb0    [...]    __sys_sendmsg+0x5f/0xb0    do_syscall_64+0x55/0xc70  The problem applies for XDP_PASS as well which is handled in a different code path in the driver.  This patch fixes the issue by doing page frag counting on all the original XDP buffer fragments for all relevant XDP actions (XDP_TX , XDP_REDIRECT and XDP_PASS). This is basically reverting to the original counting before the commit in the fixes tag.  As frag_page is still pointing to the original tail, the nr_frags parameter to xdp_update_skb_frags_info() needs to be calculated in a different way to reflect the new nr_frags.",
                                "cve_priority": "low",
                                "cve_public_date": "2026-05-08 15:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-43198",
                                "url": "https://ubuntu.com/security/CVE-2026-43198",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  tcp: fix potential race in tcp_v6_syn_recv_sock()  Code in tcp_v6_syn_recv_sock() after the call to tcp_v4_syn_recv_sock() is done too late.  After tcp_v4_syn_recv_sock(), the child socket is already visible from TCP ehash table and other cpus might use it.  Since newinet->pinet6 is still pointing to the listener ipv6_pinfo bad things can happen as syzbot found.  Move the problematic code in tcp_v6_mapped_child_init() and call this new helper from tcp_v4_syn_recv_sock() before the ehash insertion.  This allows the removal of one tcp_sync_mss(), since tcp_v4_syn_recv_sock() will call it with the correct context.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-05-06 12:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-43197",
                                "url": "https://ubuntu.com/security/CVE-2026-43197",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  netconsole: avoid OOB reads, msg is not nul-terminated  msg passed to netconsole from the console subsystem is not guaranteed to be nul-terminated. Before recent commit 7eab73b18630 (\"netconsole: convert to NBCON console infrastructure\") the message would be placed in printk_shared_pbufs, a static global buffer, so KASAN had harder time catching OOB accesses. Now we see:      printk: console [netcon_ext0] enabled     BUG: KASAN: slab-out-of-bounds in string+0x1f7/0x240     Read of size 1 at addr ffff88813b6d4c00 by task pr/netcon_ext0/594      CPU: 65 UID: 0 PID: 594 Comm: pr/netcon_ext0 Not tainted 6.19.0-11754-g4246fd6547c9     Call Trace:      kasan_report+0xe4/0x120      string+0x1f7/0x240      vsnprintf+0x655/0xba0      scnprintf+0xba/0x120      netconsole_write+0x3fe/0xa10      nbcon_emit_next_record+0x46e/0x860      nbcon_kthread_func+0x623/0x750      Allocated by task 1:      nbcon_alloc+0x1ea/0x450      register_console+0x26b/0xe10      init_netconsole+0xbb0/0xda0      The buggy address belongs to the object at ffff88813b6d4000                 which belongs to the cache kmalloc-4k of size 4096     The buggy address is located 0 bytes to the right of                 allocated 3072-byte region [ffff88813b6d4000, ffff88813b6d4c00)",
                                "cve_priority": "negligible",
                                "cve_public_date": "2026-05-06 12:16:00 UTC"
                            },
                            {
                                "cve": "CVE-2026-43083",
                                "url": "https://ubuntu.com/security/CVE-2026-43083",
                                "cve_description": "In the Linux kernel, the following vulnerability has been resolved:  net: ioam6: fix OOB and missing lock  When trace->type.bit6 is set:      if (trace->type.bit6) {         ...         queue = skb_get_tx_queue(dev, skb);         qdisc = rcu_dereference(queue->qdisc);  This code can lead to an out-of-bounds access of the dev->_tx[] array when is_input is true. In such a case, the packet is on the RX path and skb->queue_mapping contains the RX queue index of the ingress device. If the ingress device has more RX queues than the egress device (dev) has TX queues, skb_get_queue_mapping(skb) will exceed dev->num_tx_queues. Add a check to avoid this situation since skb_get_tx_queue() does not clamp the index. This issue has also revealed that per queue visibility cannot be accurate and will be replaced later as a new feature.  While at it, add missing lock around qdisc_qstats_qlen_backlog(). The function __ioam6_fill_trace_data() is called from both softirq and process contexts, hence the use of spin_lock_bh() here.",
                                "cve_priority": "high",
                                "cve_public_date": "2026-05-06 10:16:00 UTC"
                            }
                        ],
                        "log": [
                            "",
                            "  * jammy/linux-riscv-6.8: 6.8.0-137.137~22.04.1 -proposed tracker (LP: #2160835)",
                            "",
                            "  [ Ubuntu: 6.8.0-137.137 ]",
                            "",
                            "  * noble/linux: 6.8.0-137.137 -proposed tracker (LP: #2160836)",
                            "  * Packaging resync (LP: #1786013)",
                            "    - [Packaging] update annotations scripts",
                            "    - [Packaging] debian.master/dkms-versions -- update from kernel-versions",
                            "      (main/s2026.06.22)",
                            "  * CVE-2026-53225",
                            "    - sctp: fix uninit-value in __sctp_rcv_asconf_lookup()",
                            "  * CVE-2026-53228",
                            "    - ipv6: sit: reload inner IPv6 header after GSO offloads",
                            "  * CVE-2026-46242",
                            "    - eventpoll: fix ep_remove struct eventpoll / struct file UAF",
                            "  * CVE-2026-46331",
                            "    - net/sched: fix pedit partial COW leading to page cache corruption",
                            "  * CVE-2026-53212",
                            "    - netfilter: nft_tunnel: fix use-after-free on object destroy",
                            "  * CVE-2026-53359",
                            "    - KVM: x86: Fix shadow paging use-after-free due to unexpected role",
                            "  * CVE-2026-53151",
                            "    - rxrpc: Fix the ACK parser to extract the SACK table for parsing",
                            "  * CVE-2026-52924",
                            "    - sctp: purge outqueue on stale COOKIE-ECHO handling",
                            "  * CVE-2026-53215",
                            "    - net: mvpp2: refill RX buffers before XDP or skb use",
                            "  * CVE-2026-53176",
                            "    - IB/isert: Reject login PDUs shorter than ISER_HEADERS_LEN",
                            "  * CVE-2026-52931",
                            "    - batman-adv: tp_meter: avoid use of uninit sender vars",
                            "  * CVE-2026-52914",
                            "    - batman-adv: fix fragment reassembly length accounting",
                            "  * CVE-2026-46325",
                            "    - RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE",
                            "  * CVE-2026-43465",
                            "    - net/mlx5e: RX, Fix XDP multi-buf frag counting for striding RQ",
                            "  * CVE-2026-43198",
                            "    - tcp: fix potential race in tcp_v6_syn_recv_sock()",
                            "  * CVE-2026-43197",
                            "    - netconsole: avoid OOB reads, msg is not nul-terminated",
                            "  * CVE-2026-43083",
                            "    - net: ioam6: fix OOB and missing lock",
                            ""
                        ],
                        "package": "linux-riscv-6.8",
                        "version": "6.8.0-137.137~22.04.1",
                        "urgency": "medium",
                        "distributions": "jammy",
                        "launchpad_bugs_fixed": [
                            2160835,
                            2160836,
                            1786013
                        ],
                        "author": "Alessio Faina <alessio.faina@canonical.com>",
                        "date": "Wed, 22 Jul 2026 10:15:10 +0200"
                    }
                ],
                "notes": "linux-riscv-6.8-headers-6.8.0-137 version '6.8.0-137.137~22.04.1' (source package linux-riscv-6.8 version '6.8.0-137.137~22.04.1') was added. linux-riscv-6.8-headers-6.8.0-137 version '6.8.0-137.137~22.04.1' has the same source package name, linux-riscv-6.8, as removed package linux-headers-6.8.0-136-generic. As such we can use the source package version of the removed package, '6.8.0-136.136~22.04.3', as the starting point in our changelog diff. Kernel packages are an example of where the binary package name changes for the same source package. Using the removed package source package version as our starting point means we can still get meaningful changelog diffs even for what appears to be a new package.",
                "is_version_downgrade": false
            }
        ],
        "snap": []
    },
    "removed": {
        "deb": [
            {
                "name": "linux-headers-6.8.0-136-generic",
                "from_version": {
                    "source_package_name": "linux-riscv-6.8",
                    "source_package_version": "6.8.0-136.136~22.04.3",
                    "version": "6.8.0-136.136~22.04.3"
                },
                "to_version": {
                    "source_package_name": null,
                    "source_package_version": null,
                    "version": null
                },
                "cves": [],
                "launchpad_bugs_fixed": [],
                "changes": [],
                "notes": null,
                "is_version_downgrade": false
            },
            {
                "name": "linux-image-6.8.0-136-generic",
                "from_version": {
                    "source_package_name": "linux-riscv-6.8",
                    "source_package_version": "6.8.0-136.136~22.04.3",
                    "version": "6.8.0-136.136~22.04.3"
                },
                "to_version": {
                    "source_package_name": null,
                    "source_package_version": null,
                    "version": null
                },
                "cves": [],
                "launchpad_bugs_fixed": [],
                "changes": [],
                "notes": null,
                "is_version_downgrade": false
            },
            {
                "name": "linux-modules-6.8.0-136-generic",
                "from_version": {
                    "source_package_name": "linux-riscv-6.8",
                    "source_package_version": "6.8.0-136.136~22.04.3",
                    "version": "6.8.0-136.136~22.04.3"
                },
                "to_version": {
                    "source_package_name": null,
                    "source_package_version": null,
                    "version": null
                },
                "cves": [],
                "launchpad_bugs_fixed": [],
                "changes": [],
                "notes": null,
                "is_version_downgrade": false
            },
            {
                "name": "linux-riscv-6.8-headers-6.8.0-136",
                "from_version": {
                    "source_package_name": "linux-riscv-6.8",
                    "source_package_version": "6.8.0-136.136~22.04.3",
                    "version": "6.8.0-136.136~22.04.3"
                },
                "to_version": {
                    "source_package_name": null,
                    "source_package_version": null,
                    "version": null
                },
                "cves": [],
                "launchpad_bugs_fixed": [],
                "changes": [],
                "notes": null,
                "is_version_downgrade": false
            }
        ],
        "snap": []
    },
    "notes": "Changelog diff for Ubuntu 22.04 jammy image from daily image serial 20260802 to 20260807",
    "from_series": "jammy",
    "to_series": "jammy",
    "from_serial": "20260802",
    "to_serial": "20260807",
    "from_manifest_filename": "daily_manifest.previous",
    "to_manifest_filename": "manifest.current"
}