[RFC] Linux kernel: 52 latent bugs found by static audit (still present in v7.2-rc6)

Lin INK <[email protected]>
Newsgroups gmane.linux.kernel
Message-ID <CAEvJW1Pa7v0h1WvydouwDo+JSTaMfqU7G3E9fy78Wap7+fq+vw@mail.gmail.com>
REPORT_TO_KERNEL_EN.md (text/markdown, 11.9 KB)
Subject: [SECURITY][PATCH 0/N] Linux kernel: several latent bugs in v6.17-rc3 that remain in current mainline (v7.2-rc6)

To: [email protected]
Cc: [email protected]
Bcc: subsystem maintainers (see individual patch To/Cc)

NOTE: This is a batch disclosure for bugs discovered by a systematic static
audit of the Linux kernel (initial snapshot v6.17-rc3, tag dated 2025-08-24).
All reported bugs below were re-verified against current mainline
(v7.2-rc6, snapshot 2026-08-08 / commit 06cf61899d64) on 2026-08-09 and are
confirmed to STILL BE PRESENT. Individual patches will follow as follow-up
emails, one per bug, to the relevant subsystem maintainers (in Cc via
scripts/get_maintainer.pl). Please treat this as a coordinated disclosure;
default disclosure timeline is 7 days, extensible on request.

Reported-by: [Your Name] <[your-email]>
This report was generated with the assistance of an automated auditing tool
(SpecAuditor). Each finding below was manually reviewed and re-checked against
the current kernel source before inclusion.

======================================================================
SUMMARY
======================================================================

Kernel version affected: v6.17-rc3 through v7.2-rc6 (current mainline)
Number of bugs reported: 52
Categories: out-of-bounds read, uninitialized stack disclosure,
reference-count / refcount leaks, missing NULL checks, missing error-path
cleanup, integer-arithmetic concerns.

Below is the full list. Each entry: [num] function (file) -- one-line summary.
Detailed per-bug analysis and proposed fixes are in the individual patches.

A. WIRELESS RX PATH -- OUT-OF-BOUNDS READS (drivers/net/wireless)

  [16] ath10k_htt_rx_h_find_rfc1042 (drivers/net/wireless/ath/ath10k/htt_rx.c, L1645)
       hdr_len derived from ieee80211_hdrlen() on untrusted frame control is
       used in round_up(hdr_len) + round_up(crypto_len) without validating
       against skb->len; A-MSDU/undecap math can read past the skb data.
  [17] ath10k_htt_rx_h_get_pn (htt_rx.c, L1859)
       ehdr = skb->data + ieee80211_hdrlen(hdr->frame_control); reads
       ehdr[0..7] (PN) with no skb->len check -> OOB read.
  [18] ath10k_htt_rx_h_undecap_eth (htt_rx.c, L1700-1709)
       hdr_len = ieee80211_hdrlen() on untrusted first_hdr, then
       memcpy(skb_push(msdu, hdr_len), hdr, hdr_len) -- no bounds check.
  [19] ath10k_htt_rx_h_undecap_nwifi (htt_rx.c, L1593-1602)
       Same unchecked hdr_len + skb_push/memcpy pattern. NOTE: the identical
       bug was fixed in ath11k (commit 6b471e9aefee, 2026-05) and ath12k
       (CVE-2025-37943); the ath10k instance remains unpatched.
  [20] ath10k_htt_rx_h_undecap_raw (htt_rx.c, L1483-1496)
       hdr_len then memcpy(skb_push(msdu,hdr_len),hdr,hdr_len) unchecked.
  [21] ath10k_htt_rx_proc_rx_frag_ind_hl (htt_rx.c, L2825)
       hdr_space = ieee80211_hdrlen() with no validation against skb->len.
  [22] ath10k_htt_rx_proc_rx_ind_hl (htt_rx.c, L2612-2618)
       offset = ieee80211_hdrlen() inside the protected-frame branch, then
       memmove(skb->data-CCMP_HDR_LEN, data, offset) + skb_push(CCMP_HDR_LEN);
       no skb->len check.
  [23] ath10k_htt_rx_validate_amsdu (htt_rx.c, L2267)
       subframe_hdr = hdr + round_up(hdr_len) + crypto_len then
       ether_addr_equal(subframe_hdr, rfc1042_header) -- read past end if
       subframe is truncated.
  [24] ath11k_dp_rx_h_undecap_eth (drivers/net/wireless/ath/ath11k/dp_rx.c, L2145-2154)
       hdr_len = ieee80211_hdrlen(first_hdr->frame_control) then
       memcpy(skb_push(msdu,hdr_len),hdr,hdr_len) unchecked. The 2026 nwifi
       check (6b471e9aefee) explicitly does NOT cover the ETH decap path.
  [26] ath11k_dp_rx_h_undecap_raw (dp_rx.c, L2080-2085)
       hdr_len then memmove(msdu->data+crypto_len, msdu->data, hdr_len) +
       skb_pull(msdu, crypto_len) -- no skb->len check.
  [9]  adm8211_tx (drivers/net/wireless/admtek/adm8211.c, L1689)
       hdrlen = ieee80211_hdrlen(hdr->frame_control);
       memcpy(skb->cb, skb->data, hdrlen); skb_pull(skb, hdrlen) -- no
       skb->len check (low reachability: TX path, frame_control usually
       validated, but the unchecked pattern is unpatched).

B. INFINIBAND SA -- UNINITIALIZED STACK (drivers/infiniband/core/sa_query.c)

  [63] ib_nl_process_good_resolve_rsp (L934-986)
       struct sa_path_rec recs[RDMA_PRIMARY_PATH_MAX_REC_NUM] declared without
       zero-init; ib_unpack() partially fills; uninitialized bytes can be
       propagated to userspace via the path-record callback.
  [64] ib_sa_classport_info_rec_callback (L2072-2091)
       struct opa_class_port_info rec declared without {} init; ib_unpack()
       partially fills -> potential stack info leak.
  [65] ib_sa_guidinfo_rec_callback (L1960)
       struct ib_sa_guidinfo_rec rec declared without zero-init.
  [66] ib_sa_mcmember_rec_callback (L1869)
       struct ib_sa_mcmember_rec rec declared without zero-init.

C. FILESYSTEMS (fs/)

  [2]  __ceph_setxattr (fs/ceph/xattr.c, L1234; blob-size math at L878)
       required_blob_size = 4 + count*(4+4) + names_size + vals_size computed
       in signed int with no overflow guard before ceph_buffer_new().
  [83] ni_decompress_file (fs/ntfs3/frecord.c, L2022-2023)
       for (vcn; vcn < end; vcn += clen) loop checks only err from
       attr_data_get_block(), not clen==0 -> possible infinite loop / stall.
  [85] ntfs_compress_write (fs/ntfs3/file.c, L1018)
       clen from attr_data_get_block() used without !clen validation.
  [86] ntfs_fallocate (fs/ntfs3/file.c, L669-670)
       for (vcn; vcn < cend; vcn += clen) loop uses clen without !clen check.

D. DRM / GPU (drivers/gpu/drm/)

  [40] cdv_intel_dp_get_modes (drivers/gpu/drm/gma500/cdv_intel_dp.c, L1770-1771)
       drm_mode_duplicate() result passed to drm_mode_probed_add() without
       NULL check (OOM NULL-deref).
  [51] drm_gem_object_init (drivers/gpu/drm/drm_gem.c, L184-200)
       On shmem_file_setup() failure, returns error after
       drm_gem_private_object_init() without matching
       drm_gem_private_object_fini() cleanup.
  [55] etnaviv_gem_new_handle (drivers/gpu/drm/etnaviv/etnaviv_gem.c, L626-644)
       error path after drm_gem_object_init failure calls drm_gem_object_put()
       on an object never added to the GEM list.
  [59] fsl_dcu_unload (drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c, L155-158)
       drm_atomic_helper_shutdown() called before drm_kms_helper_poll_fini()
       (teardown ordering).
  [61] gem_create_obj (drivers/gpu/drm/xen/xen_drm_front_gem.c, L126-128)
       After drm_gem_object_init() failure, kfree(xen_obj) without
       drm_gem_object_release().
  [80] mtk_drm_of_get_ddp_ep_cid (drivers/gpu/drm/mediatek/mtk_drm_drv.c, L856-931)
       of_graph_get_remote_port_parent() ref leaked on caller error path.
  [88] of_dp_aux_populate_bus (drivers/gpu/drm/display/drm_dp_aux_bus.c, L272-312)
       of_get_next_available_child() ref not put on success path (leak).
  [102] tegra_bo_alloc_object (drivers/gpu/drm/tegra/gem.c, L316-329)
       kfree(bo) without drm_gem_object_release() on init failure.
  [47] dce_v6_0_sw_fini (drivers/gpu/drm/amd/amdgpu/dce_v6_0.c, L2808-2810)
       drm_edid_free(bios_hardcoded_edid) before drm_kms_helper_poll_fini()
       (free-before-flush ordering).
  [13] amdgpu_cs_submit (drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c, L1343)
       p->fence = dma_fence_get(&leader->base.s_fence->finished); verify
       reference balance (put exists in amdgpu_cs_parser_fini L1406) -- listed
       for maintainer confirmation.

E. CXL / FPGA / CLK / BUS (drivers/)

  [43] cxl_acpi_qos_class (drivers/cxl/acpi.c, L315-318)
       cxl_root->port.uport_dev used with dev_is_platform() without NULL check.
  [45] cxl_port_setup_regs (drivers/cxl/core/port.c, L776)
       dev_is_platform(port->uport_dev) without NULL check.
  [58] fme_pr (drivers/fpga/dfl-fme-pr.c, L128-137)
       fpga_image_info_alloc() result (info) not freed on !fme/!region error
       paths (ref leak).
  [89] of_fpga_region_parse_ov (drivers/fpga/of-fpga-region.c, L234-237)
       On devm_kstrdup() failure returns ERR_PTR(-ENOMEM) without
       fpga_image_info_free(info).
  [30] bcm2835_register_pll_divider (drivers/clk/bcm/clk-bcm2835.c, L1387-1390)
       devm_kasprintf() failure returns NULL; caller at L2319 stores unchecked
       NULL into hws[i].
  [90] omap2_clk_provider_init (drivers/clk/ti/clk.c, L405-416)
       of_get_child_by_name(parent,"clocks") ref not put on kzalloc-fail path.
  [1]  __cci_ace_get_port (drivers/bus/arm-cci.c, L167)
       of_parse_phandle(dn,"cci-control-port",0) ref never released
       (of_node ref leak).
  [6]  acpi_os_terminate (drivers/acpi/osl.c, L1724-1740)
       GPE0/GPE1/PM1a/PM1b/reset unmap sequence unchanged (verify ref/resource
       lifetime vs acpi_os_map_generic_address).

F. MTD / DSA / NET / SOUND / MISC

  [74] ma35_nand_read_oob_hwecc (drivers/mtd/nand/raw/nuvoton-ma35d1-nand-controller.c, L695)
       nand_read_oob_op() return unchecked before using chip->oob_poi.
  [75] ma35_nand_read_page_hwecc (same file, L669)
       Same unchecked nand_read_oob_op().
  [73] ksz_mdio_register (drivers/net/dsa/microchip/ksz_common.c, L2504-2511)
       of_mdio_find_bus() ref stored in dev->parent_mdio_bus; no mdiobus_put()
       anywhere (refcount leak).
  [84] node_init_node_access (drivers/base/node.c, L173)
       device_register() failure path does manual kfree_const+kfree without
       put_device().
  [48] device_register (drivers/base/core.c, L3851)
       device_initialize()+device_add(); on add failure the device stays
       initialized and callers must put_device() (documented; listed for
       confirmation).
  [70] isa_bus_init (drivers/base/isa.c, L170)
       root_device_register() error path only unregisters bus.
  [72] kcs_bmc_ipmi_add_device (drivers/char/ipmi/kcs_bmc_cdev_ipmi.c, L488)
       devm allocations; alloc-failure check returns -EINVAL instead of
       -ENOMEM (minor; listed for confirmation).
  [103] test_multipart_messages (drivers/char/ipmi/ipmi_ssif.c, L1589)
       i2c_smbus_write_block_data(..., 0, msg+64) zero-length MIDDLE-part test
       unchanged (verify semantics).
  [101] snd_usb_parse_datainterval (sound/usb/helper.c, L114)
       get_endpoint(alts,0)->bInterval without checking bNumEndpoints >= 1.
  [52]  endpoint_set_syncinterval (sound/usb/endpoint.c, L737)
       get_endpoint(alts, ep->ep_idx) without bNumEndpoints check (comment
       L689-690 relies on caller guarantee).
  [104] uaudio_populate_uac_desc (sound/usb/qcom/qc_audio_offload.c, L1321)
       get_endpoint(alts,0)->wMaxPacketSize in UAC3 branch without
       bNumEndpoints check.
  [10]  aie2_cmd_submit (drivers/accel/amdxdna/aie2_ctx.c, L1181)
       job->out_fence = dma_fence_get(&job->base.s_fence->finished) after
       drm_sched_job_arm(); put in aie2_job_release; listed for confirmation
       of NULL s_fence handling on OOM.

======================================================================
Bugs verified as NO LONGER PRESENT in current mainline (not reported)
======================================================================

  #44 cxl_fw_prepare   -- fixed (cxl_mem_get_fw_info return checked, L927)
  #46 dce_v11_0_sw_fini -- file removed (non-DC DCE 11 code deleted)
  #87 ntfs_get_block_vbo -- function removed by iomap rewrite; successor
      ntfs_iomap_begin now guards !clen (returns -EINVAL, L811)

======================================================================
NOTES FOR MAINTAINERS
======================================================================

1. Each individual fix patch will be sent as a separate follow-up email to the
   appropriate subsystem maintainer list, with a "Fixes:" tag and Cc: stable
   where appropriate.
2. For the wireless RX-path OOB group (A), the analogous fixes already exist
   for ath11k (6b471e9aefee) and ath12k (CVE-2025-37943); the ath10k and
   remaining ath11k decap paths still lack the equivalent validation.
3. Line numbers refer to v7.2-rc6 (commit 06cf61899d64). Please let me know
   if any of these are already tracked elsewhere so I can drop them.

Signed-off-by: [Your Name] <[your-email]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.