{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-80712","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2026-08-26T14:34:25.788Z","datePublished":"2026-08-28T06:53:11.243Z","dateUpdated":"2026-08-29T06:22:28.248Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-08-29T06:22:28.248Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nspi: spi-qpic-snand: write the feature value before executing SET_FEATURE\n\nqcom_spi_send_cmdaddr() programs NAND_FLASH_CMD/NAND_EXEC_CMD and submits\nthe descriptors, which makes the controller execute the command\nimmediately. For SPINAND_SET_FEATURE the value to be written is only\nplaced into NAND_FLASH_FEATURES afterwards, by qcom_spi_io_op(), in a\nsecond submission - so the chip is programmed with whatever that register\nhappened to hold from a previous operation, and the intended value is only\napplied by the *next* SET_FEATURE.\n\nMeasured on a TP-Link Archer AX55 v1 (IPQ5018, ESMT F50L1G41LB): writing\n0x40 to the configuration register (0xb0) leaves the chip at 0x00, and the\nsubsequent write of 0x00 leaves it at 0x40 - every write lands one\noperation late.\n\nThis stayed unnoticed until v6.18 added SPI-NAND OTP support together\nwith OTP entries for ESMT chips. spinand_otp_rw() enables OTP mode,\nreads, and disables it again, and mtd_otp_nvmem_add() does this during\nMTD registration. With the off-by-one, the \"disable\" write actually\napplies the previously requested value, so CFG_OTP_ENABLE ends up set:\nthe chip stays in OTP mode, every subsequent array read returns the OTP\narea instead of the array (UBI reports an empty device) and all writes\nfail with -EIO because the OTP area is write protected. On this board\nthat makes the whole flash unusable and the device unbootable.\n\nWrite the feature value into NAND_FLASH_FEATURES as part of the same\ntransaction, before NAND_EXEC_CMD. While at it, copy only the bytes the\noperation actually carries - the previous code dereferenced a 4-byte\npointer on a one-byte buffer (spinand->scratchbuf).\n\nWith this patch the flash contents read back bit-identical to a\nknown-good dump of the same board taken under the vendor firmware\n(md5-verified across partitions), and writes work."}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","baseScore":8.4,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The flaw is in the onboard Qualcomm QPIC SPI-NAND driver reached via spi_mem/MTD during driver probe and flash operations; it is not reachable through network protocols, only local kernel flash/MTD paths on embedded SoCs (IPQ5018/IPQ9574 routers, APs, gateways).\nAC:L - Every SPINAND_SET_FEATURE is deterministically one operation late because NAND_EXEC_CMD fires before NAND_FLASH_FEATURES is programmed; the OTP disable-after-read sequence reliably leaves CFG_OTP_ENABLE set without races or attacker-uncontrollable timing.\nPR:N - No attacker privileges are required once an affected kernel runs: mtd_device_parse_register() calls mtd_otp_nvmem_add() during boot, which triggers spinand_otp_rw() and bricks flash on ESMT chips with OTP support without any userspace or admin action.\nUI:N - Exploitation requires no victim interaction; the vulnerable OTP read path runs automatically during MTD registration at driver probe/boot on affected Qualcomm platforms with ESMT SPI-NAND OTP tables added in v6.18.\nS:U - Impact is confined to the same kernel/flash security boundary on the embedded device; there is no cross-VM, cross-container, or IOMMU boundary bypass—only persistent corruption of onboard SPI-NAND chip configuration and flash availability.\nC:H - When OTP mode sticks enabled, all subsequent array reads return OTP contents instead of normal flash data, disclosing factory OTP region data; the pre-fix 4-byte dereference on a 1-byte SET_FEATURE buffer also programs stale register bytes into the chip.\nI:H - Misprogrammed feature registers persistently corrupt SPI-NAND configuration; the demonstrated OTP-mode lock leaves the OTP area write-protected, all flash writes fail with -EIO, UBI sees an empty device, and the router becomes permanently unbootable until hardware reflash.\nA:H - Affected devices suffer complete loss of boot flash availability—the commit documents whole-flash unusability and unbootable TP-Link Archer AX55 boards, constituting total persistent denial of service on consumer WiFi routers and Qualcomm embedded gateways."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/spi/spi-qpic-snand.c"],"versions":[{"version":"7304d1909080ef0c9da703500a97f46c98393fcd","lessThan":"581e5166f0780103dc91c0d8ebc801f9af4824b0","status":"affected","versionType":"git"},{"version":"7304d1909080ef0c9da703500a97f46c98393fcd","lessThan":"3ba021079ef2ac6e21e3547328496ac42d22b56a","status":"affected","versionType":"git"},{"version":"7304d1909080ef0c9da703500a97f46c98393fcd","lessThan":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/spi/spi-qpic-snand.c"],"versions":[{"version":"6.15","status":"affected"},{"version":"0","lessThan":"6.15","status":"unaffected","versionType":"semver"},{"version":"6.18.44","lessThanOrEqual":"6.18.*","status":"unaffected","versionType":"semver"},{"version":"7.1.8","lessThanOrEqual":"7.1.*","status":"unaffected","versionType":"semver"},{"version":"7.2","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.15","versionEndExcluding":"6.18.44"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.15","versionEndExcluding":"7.1.8"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.15","versionEndExcluding":"7.2"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/581e5166f0780103dc91c0d8ebc801f9af4824b0"},{"url":"https://git.kernel.org/stable/c/3ba021079ef2ac6e21e3547328496ac42d22b56a"},{"url":"https://git.kernel.org/stable/c/8fd62901d6bf03f274a49dd0060793cc07dd51b0"}],"title":"spi: spi-qpic-snand: write the feature value before executing SET_FEATURE","x_generator":{"engine":"bippy-1.2.0"}}}}