{"id":41298,"date":"2026-10-19T00:33:05","date_gmt":"2026-10-18T16:33:05","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98826"},"modified":"2026-10-19T00:33:05","modified_gmt":"2026-10-18T16:33:05","slug":"cve-2026-98826","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98826","title":{"rendered":"CVE-2026-98826 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nrtc: ac100: Fix clock"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>rtc: ac100: Fix clock provider use-after-free on probe failure<\/p>\n<p>ac100_rtc_register_clks() registers the RTC-32k clock with<br \/>\nclk_hw_register_fixed_rate() and the clock provider with<br \/>\nof_clk_add_hw_provider(). Neither is device managed, and both are<br \/>\nreleased only from ac100_rtc_remove(). The driver core does not call<br \/>\nremove() when probe() fails: really_probe() reaches probe_failed below<br \/>\nthe device_remove() call and goes straight to releasing the device&#8217;s<br \/>\nmanaged resources.<\/p>\n<p>ac100_rtc_probe() ends with<\/p>\n<p>\treturn devm_rtc_register_device(chip-&gt;rtc);<\/p>\n<p>so if that fails after the clocks have been registered, the provider is<br \/>\nleft on the global of_clk_providers list holding chip-&gt;clk_data, which<br \/>\nwas allocated with devm_kzalloc() and is freed while probe() unwinds. A<br \/>\nlater lookup on this device tree node then reads freed memory in<br \/>\nof_clk_hw_onecell_get(). Consumers that do exactly that exist in tree:<br \/>\nthe wifi power sequence nodes on sun8i-a83t-bananapi-m3 and<br \/>\nsun8i-a83t-cubietruck-plus take , and the sun9i-a80 boards<br \/>\nroute osc32k through . The window is narrow, as<br \/>\ndevm_rtc_register_device() can only fail with -ENOMEM here, but the<br \/>\nprovider is left dangling whenever it does.<\/p>\n<p>The RTC-32k clock is leaked on the same path. Since clk_core_lookup()<br \/>\nsearches a global list that is not scoped per device, __clk_register()<br \/>\nrejects the duplicate name with -EEXIST, so the leak also makes a later<br \/>\nprobe of the same device fail.<\/p>\n<p>The error path that returns -EINVAL when the ADDA 4M parent clock cannot<br \/>\nbe found leaks the RTC-32k clock in the same way. No provider has been<br \/>\nregistered at that point, so that one is a leak rather than a<br \/>\nuse-after-free.<\/p>\n<p>Register both with devm_clk_hw_register_fixed_rate() and<br \/>\ndevm_of_clk_add_hw_provider() so that they are released whenever the<br \/>\ndevice goes away, on a failed probe as well as on unbind. Devres<br \/>\nreleases in reverse order of acquisition, so the provider is removed<br \/>\nbefore chip-&gt;clk_data is freed, and the clkout children are now<br \/>\nunregistered before their parent rather than after it.<br \/>\nac100_rtc_unregister_clks() and the remove callback then have nothing<br \/>\nleft to do and are removed.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>rtc: ac100: Fix clock provider use-after-free on probe failure<\/p>\n<p>ac100_rtc_register_clks() registers the RTC-32k clock with<br \/>\nclk_hw_r<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-41298","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/41298","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=41298"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=41298"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=41298"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}