Odebrany

CVE-2026-98826

opublikowano:
modyfikacja:
Ocena CVSS
n/a
Brak oceny

>_ Opis

Tłumaczenie automatyczne – może zawierać nieścisłości.

W jądrze Linuksa usunięto następującą lukę:

rtc: ac100: Napraw dostawcę zegara po zwolnieniu w przypadku awarii sondy

ac100_rtc_register_clks() rejestruje zegar RTC-32k za pomocą
clk_hw_register_fixed_rate() i dostawca zegara za pomocą
of_clk_add_hw_provider(). Żadne z tych urządzeń nie jest zarządzane, a oba tak
zwolniony tylko z ac100_rtc_remove(). Rdzeń sterownika nie dzwoni
usuń() gdy sonda() nie powiedzie się: naprawdę_probe() osiąga poniżej sondę_failed
wywołanie urządzenia_remove() i od razu przejdzie do zwolnienia urządzenia
zarządzane zasoby.

ac100_rtc_probe() kończy się na

zwróć devm_rtc_register_device(chip->rtc);

więc jeśli to się nie powiedzie po zarejestrowaniu zegarów, dostawca tak
pozostawiony na globalnej liście of_clk_providers zawierający chip->clk_data, który
został przydzielony za pomocą devm_kzalloc() i jest zwalniany podczas odwijania sondy(). A
późniejsze sprawdzenie tego węzła drzewa urządzeń, a następnie wczytanie zwolnionej pamięci
of_clk_hw_onecell_get(). Konsumenci, którzy robią dokładnie to, istnieją w drzewie:
węzły sekwencji zasilania Wi-Fi na sun8i-a83t-bananapi-m3 i
sun8i-a83t-cubietruck-plus weź <&ac100_rtc 1> i płyty sun9i-a80
poprowadź osc32k przez <&ac100_rtc 0>. Okno jest wąskie, jak
devm_rtc_register_device() może zawieść tylko z -ENOMEM tutaj, ale
dostawca pozostaje zawieszony, ilekroć to robi.

Zegar RTC-32k wycieka tą samą ścieżką. Ponieważ clk_core_lookup()
przeszukuje listę globalną, która nie jest ograniczona do poszczególnych urządzeń, __clk_register()
odrzuca zduplikowaną nazwę z -EEXIST, więc wyciek następuje również później
awaria sondy tego samego urządzenia.

Ścieżka błędu zwracająca -EINVAL, gdy zegar nadrzędny ADDA 4M nie może
można znaleźć przecieki zegara RTC-32k w ten sam sposób. Żaden dostawca nie był
zarejestrowany w tym momencie, więc jest to raczej wyciek niż a
używać po-bezpłatnie.

Zarejestruj oba za pomocą devm_clk_hw_register_fixed_rate() i
devm_of_clk_add_hw_provider() tak, aby były zwalniane za każdym razem, gdy
urządzenie zniknie, zarówno w przypadku awarii sondy, jak i po rozłączeniu. Devres
uwalnia w odwrotnej kolejności nabycia, więc dostawca zostaje usunięty
zanim chip->clk_data zostanie zwolniony, a dzieci clkout są teraz
niezarejestrowane przed rodzicem, a nie po nim.
ac100_rtc_unregister_clks() i wywołanie zwrotne usuwania nie dają wtedy nic
pozostało do zrobienia i są usuwane.

>_ Referencje

Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.

This product uses the NVD API but is not endorsed or certified by the NVD.

Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.

CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.

NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org