CVE Catalog

CVE-2026-90348

Unknown
Published: Translated: NVD NIST

Summary

In the Linux kernel's ath10k driver for SNOC (WCN3990), copying the MSA region to a crash dump uses plain memcpy() which performs unaligned accesses on a MEMREMAP_WT mapping. This causes an alignment fault and kernel crash during devcoredump collection, and zeroes the dump buffer.

Risk Assessment

A kernel crash during firmware crash handling can prevent diagnostic data collection and break modem SSR recovery, impacting system stability.

Recommendation

Apply a Linux kernel patch that changes the copy to memcpy_fromio() to avoid invalid device-memory accesses.

Other vulnerabilities in Linux kernel

See all
Original NVD description (English source)

In the Linux kernel, the following vulnerability has been resolved: wifi: ath10k: snoc: use memcpy_fromio() for MSA ramdump On WCN3990/SNOC the MSA region is mapped with devm_memremap(MEMREMAP_WT). On arm64 such a mapping is not Normal-cacheable, so unaligned accesses to it are not permitted. ath10k_msa_dump_memory() copies the region with a plain memcpy(), whose optimized __pi_memcpy_generic implementation issues wide/unaligned loads. This triggers an alignment fault (FSC=0x21) Oops in ath10k_snoc_fw_crashed_dump() while collecting the devcoredump: Unable to handle kernel paging request ... FSC=0x21: alignment fault pc : __pi_memcpy_generic lr : ath10k_snoc_fw_crashed_dump [ath10k_snoc] The Oops both leaves the firmware RAM dump buffer zeroed (no dump is captured) and crashes the kernel, which in turn breaks modem SSR recovery. Use memcpy_fromio(), which only performs accesses that are valid for such a device-memory mapping. The generic memcpy_fromio() implementation aligns the source before issuing word-sized reads and stores the destination with put_unaligned(), so it is also safe for the coherent DMA allocation used on the non-reserved-memory path. ath11k and ath12k use the same pattern when copying target memory into crash dumps, so call it unconditionally here too. The MEMREMAP_WT pointer is a plain void *, so an explicit __iomem cast is needed; use __force to keep sparse happy. Tested-on: WCN3990 hw1.0 SNOC WLAN.HL.3.3.7.c5-00107-QCAHLSWMTPL-1

Vulnerability data from NVD (NIST) · CISA KEV · EPSS