---
id: "CVE-2026-99020"
kind: "vulnerability"
aliases: ["CVE-2026-99020"]
title: "Linux kernel: TPS65224 regulator driver reads past its voltage table"
severity: "low"
cvss: null
epss: 0.00209
exploited: false
status: "open"
category: "runtime"
products: []
ecosystems: []
tags: ["embedded", "linux-kernel", "power-management", "runtime"]
not_affected_if: ["no-tps65224-hardware", "no-tps652g1-hardware"]
published_at: "2026-10-23T13:17:24+00:00"
first_seen_at: "2026-10-23T21:57:33+00:00"
updated_at: "2026-10-25T12:38:50+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-99020", "first_seen_at": "2026-10-23T21:57:33+00:00"}, {"source": "epss", "url": "https://api.first.org/data/v1/epss?cve=CVE-2026-99020", "first_seen_at": "2026-10-25T12:38:50+00:00"}]
---

# Linux kernel: TPS65224 regulator driver reads past its voltage table

The Linux kernel's TPS6594 regulator driver for TPS65224 BUCK2-4 (and TPS652G1) declares four linear ranges while its table holds only two, so lookups for high selectors read beyond the array. The sources describe an out-of-bounds read during regulator registration; they do not describe code execution.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the running kernel version with `uname -r` and whether the TPS65224 or TPS652G1 regulator driver is loaded with `lsmod | grep tps65`
- unknown

## Fix

- Update the Linux kernel to a release that includes the upstream commit fixing n_linear_ranges for TPS65224 BUCK2-4
- unknown

## Timeline

- 2026-10-23T21:57:33+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-99020
- 2026-10-25T12:38:50+00:00 epss https://api.first.org/data/v1/epss?cve=CVE-2026-99020

## From the sources

In the Linux kernel, the following vulnerability has been resolved:

regulator: tps6594-regulator: Fix n_linear_ranges for TPS65224 BUCK2-4

The TPS65224 BUCK2, BUCK3 and BUCK4 descriptors pass 4 as
n_linear_ranges, but tps65224_bucks_2_3_4_ranges[] only has two
entries, covering selectors 0x00-0x45.

The linear range helpers loop over n_linear_ranges entries, so any
lookup of a selector above 0x45 reads past the end of the array and
treats whatever follows it as two more ranges. This happens on the
normal registration path when the core checks the voltage constraints
against every selector. TPS652G1 uses the same descriptors and is
affected too.

Use ARRAY_SIZE() so the count always matches the table.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
