CVE-2026-98826

CVE-2026-98826

published October 18, 2026

CVSS
—
EPSS
0%
Percentile
9.3
In the wild
Unconfirmed
What it is

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

rtc: ac100: Fix clock provider use-after-free on probe failure

ac100_rtc_register_clks() registers the RTC-32k clock with

clk_hw_register_fixed_rate() and the clock provider with

of_clk_add_hw_provider(). Neither is device managed, and both are

released only from ac100_rtc_remove(). The driver core does not call

remove() when probe() fails: really_probe() reaches probe_failed below

the device_remove() call and goes straight to releasing the device's

managed resources.

ac100_rtc_probe() ends with

return devm_rtc_register_device(chip->rtc);

so if that fails after the clocks have been registered, the provider is

left on the global of_clk_providers list holding chip->clk_data, which

was allocated with devm_kzalloc() and is freed while probe() unwinds. A

later lookup on this device tree node then reads freed memory in

of_clk_hw_onecell_get(). Consumers that do exactly that exist in tree:

the wifi power sequence nodes on sun8i-a83t-bananapi-m3 and

sun8i-a83t-cubietruck-plus take <&ac100_rtc 1>, and the sun9i-a80 boards

route osc32k through <&ac100_rtc 0>. The window is narrow, as

devm_rtc_register_device() can only fail with -ENOMEM here, but the

provider is left dangling whenever it does.

The RTC-32k clock is leaked on the same path. Since clk_core_lookup()

searches a global list that is not scoped per device, __clk_register()

rejects the duplicate name with -EEXIST, so the leak also makes a later

probe of the same device fail.

The error path that returns -EINVAL when the ADDA 4M parent clock cannot

be found leaks the RTC-32k clock in the same way. No provider has been

registered at that point, so that one is a leak rather than a

use-after-free.

Register both with devm_clk_hw_register_fixed_rate() and

devm_of_clk_add_hw_provider() so that they are released whenever the

device goes away, on a failed probe as well as on unbind. Devres

releases in reverse order of acquisition, so the provider is removed

before chip->clk_data is freed, and the clkout children are now

unregistered before their parent rather than after it.

ac100_rtc_unregister_clks() and the remove callback then have nothing

left to do and are removed.

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00200 · 9.3th percentile
Published
2026-10-18T20:17Z
References (4)
EPSS history
Timeline
  • 20 OCT 03:34Z
    EPSS moved — → 0%
    epss
  • 18 OCT 15:49Z
    rtc: ac100: Fix clock provider use-after-free on probe failure
    cvelistv5
  • 18 OCT 15:49Z
    rtc: ac100: Fix clock provider use-after-free on probe failure
    cvelistv5