{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2024-57998","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2025-02-27T02:04:28.915Z","datePublished":"2025-02-27T02:07:17.965Z","dateUpdated":"2026-08-05T11:47:18.059Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-08-05T11:47:18.059Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nOPP: add index check to assert to avoid buffer overflow in _read_freq()\n\nPass the freq index to the assert function to make sure\nwe do not read a freq out of the opp->rates[] table when called\nfrom the indexed variants:\ndev_pm_opp_find_freq_exact_indexed() or\ndev_pm_opp_find_freq_ceil/floor_indexed().\n\nAdd a secondary parameter to the assert function, unused\nfor assert_single_clk() then add assert_clk_index() which\nwill check for the clock index when called from the _indexed()\nfind functions."}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:H","baseScore":7.3,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The OPP core is a kernel-internal DVFS framework reached only from the local system — driver probe, devfreq governor transitions driven by local workload, and the devfreq/UFS sysfs frequency attributes. No network, adjacent-network, or removable-device input reaches `_read_freq()`.\nAC:L - On an affected platform the missing bound check is on a straight-line path with no race, no timing window, and no memory-layout precondition — every OPP lookup through the `_indexed()` variants deterministically reads `opp->rates[index]` past the array. Repeating the read is as simple as generating I/O or GPU load to force a DVFS transition.\nPR:L - An ordinary unprivileged process can drive devfreq/UFS clock-scaling transitions simply by generating storage or GPU load, which sends the governor through `devfreq_recommended_opp()` and `ufshcd_opp_set_rate()` into the unchecked lookup — no capability, user namespace, or sysfs write privilege is needed to reach the code.\nUI:N - The overread happens autonomously in probe context and in governor-driven DVFS work, with no victim required to open a device node, mount a filesystem, or take any other action.\nS:U - The out-of-bounds access stays within the kernel's own slab allocations and the affected device's power-management state, under the same security authority. No hypervisor, IOMMU, container, or sandbox boundary is crossed.\nC:H - The out-of-bounds word read from beyond `opp->rates[]` is not merely compared — `_opp_table_find_key()` assigns it back through `*key`, so adjacent kernel heap contents (potentially slab metadata or pointers) escape into a caller-visible frequency value that is reported through devfreq/UFS frequency interfaces and tracepoints, and the read is freely repeatable as a heap-content oracle.\nI:L - The garbage key corrupts the ceil/floor/exact comparison, causing selection of the wrong operating point, so an out-of-spec clock rate and voltage are programmed into hardware and bogus `min_freq`/`max_freq` values are stored in the UFS clock descriptors. This is unintended but bounded modification of system state, not an attacker-directed arbitrary write.\nA:H - The slab out-of-bounds read is fatal on the KASAN/`panic_on_warn` configurations common in Android, automotive, and hardened embedded builds, and even on production builds a garbage frequency makes `ufshcd_parse_clock_min_max_freq()` fail probe or leaves the UFS controller and GPU clocked at an invalid rate, producing I/O timeouts, hangs, or a device left without working storage."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/opp/core.c"],"versions":[{"version":"92fcb46659d5dbfdad0422a503e289085990a5d0","lessThan":"774dd6f0f0a61c9c3848e025d7d9eeed1a7ca4cd","status":"affected","versionType":"git"},{"version":"142e17c1c2b48e3fb4f024e62ab6dee18f268694","lessThan":"eb6ffa0192ba83ece1a318b956265519c5c7dcec","status":"affected","versionType":"git"},{"version":"142e17c1c2b48e3fb4f024e62ab6dee18f268694","lessThan":"7d68c20638e50d5eb4576492a7958328ae445248","status":"affected","versionType":"git"},{"version":"142e17c1c2b48e3fb4f024e62ab6dee18f268694","lessThan":"da2a6acc73933b7812c94794726e438cde39e037","status":"affected","versionType":"git"},{"version":"142e17c1c2b48e3fb4f024e62ab6dee18f268694","lessThan":"d659bc68ed489022ea33342cfbda2911a81e7a0d","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/opp/core.c"],"versions":[{"version":"6.6","status":"affected"},{"version":"0","lessThan":"6.6","status":"unaffected","versionType":"semver"},{"version":"6.6.76","lessThanOrEqual":"6.6.*","status":"unaffected","versionType":"semver"},{"version":"6.12.13","lessThanOrEqual":"6.12.*","status":"unaffected","versionType":"semver"},{"version":"6.13.2","lessThanOrEqual":"6.13.*","status":"unaffected","versionType":"semver"},{"version":"6.14","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.6","versionEndExcluding":"6.6.76"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.6","versionEndExcluding":"6.12.13"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.6","versionEndExcluding":"6.13.2"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.6","versionEndExcluding":"6.14"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/774dd6f0f0a61c9c3848e025d7d9eeed1a7ca4cd"},{"url":"https://git.kernel.org/stable/c/eb6ffa0192ba83ece1a318b956265519c5c7dcec"},{"url":"https://git.kernel.org/stable/c/7d68c20638e50d5eb4576492a7958328ae445248"},{"url":"https://git.kernel.org/stable/c/da2a6acc73933b7812c94794726e438cde39e037"},{"url":"https://git.kernel.org/stable/c/d659bc68ed489022ea33342cfbda2911a81e7a0d"}],"title":"OPP: add index check to assert to avoid buffer overflow in _read_freq()","x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CVE Program Container","references":[{"url":"https://lists.debian.org/debian-lts-announce/2025/03/msg00028.html"}],"providerMetadata":{"orgId":"af854a3a-2127-422b-91ae-364da2661108","shortName":"CVE","dateUpdated":"2025-11-03T19:33:10.348Z"}}]}}