Odebrany

CVE-2026-99215

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ę:

power: Supply: Core: zapobiega wyrejestrowaniu zasilacza podczas działania wywołania zwrotnego

Po zarejestrowaniu zasilacza można natychmiast rozpocząć wywołania zwrotne
uruchamianie z innych kontekstów, takich jak external_power_changed() wyzwalane przez
stos TCPM. Jeśli zasilacz nie jest zarejestrowany podczas wywołania zwrotnego
nadal działa, dane sterownika mogą być już zwolnione podczas wywołania zwrotnego
próbuje uzyskać do niego dostęp, co prowadzi do bezpłatnego użycia.

Dzieje się tak m.in. gdy magistrala sprzętowa przenosząca urządzenie zasilające
awarie (np. I2C jest blokowane przez inne nieprawidłowo działające urządzenie)
zaraz po zarejestrowaniu zasilacza, a co za tym idzie rdzenia
nadal przetwarza wywołania zwrotne, które czekały w kolejce, gdy sterownik
rozpoczyna usuwanie, co w niektórych przypadkach prowadzi do awarii jądra, np.:

[11.645942] Nie można obsłużyć dereferencji wskaźnika NULL jądra pod adresem wirtualnym 0000000000000005
[ 11.646751] Informacje o przerwaniu pamięci:
[11.647006] ESR = 0x0000000096000004
[ 11.647338] EC = 0x25: DABT (prąd EL), IL = 32 bity
[11.647806] USTAW = 0, FnV = 0
[11,648077] EA = 0, S1PTW = 0
[11.648356] FSC = 0x04: błąd translacji poziomu 0
[ 11.648785] Informacje o przerwaniu danych:
[ 11.649041] ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000
[ 11.649524] CM = 0, WnR = 0, TnD = 0, Dostęp do tagu = 0
[11.649981] GCS = 0, Nakładka = 0, DirtyBit = 0
[ 11.650390] [0000000000000005] adres użytkownika, ale active_mm to swaper
[11.650955] Błąd wewnętrzny: Ups: 0000000096000004 [#1] SMP
[ 11.651460] Moduły powiązane w:
[11.651742] Procesor: 1 UID: 0 PID: 144 Comm: kworker/1:2 Nieskażony 7.2.0-rc6-g62a9297af2cd #1 PREEMPT
[ 11.652553] Nazwa sprzętu: Flipper One rev. F0B1C2 (DT)
[ 11.653024] Kolejka robocza: zdarzenia power_supply_changed_work
[ 11.653511] pstan: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 11.654135] szt : __power_supply_is_supplied_by+0x18/0x100
[ 11.654624] lr : __power_supply_am_i_supplied+0x40/0xb8
[11.655098] sp: ffff80008192bb30
[ 11.655399] x29: ffff80008192bb30 x28: 0000000000000000 x27: 0000000000000000
[ 11.656049] x26: 0000000000000000 x25: 0000000000000000 x24: 0000000000000000
[ 11.656695] x23: ffff0000c19f4200 x22: ffffdb2232ba4ea8 x21: ffff80008192bc28
[ 11.657344] x20: ffff0000c1eef000 x19: ffff80008192bc18 x18: 00000000a0886e62
[ 11.657991] x17: 000000040044ffff x16: 04500072b5503510 x15: 0000000000000000
[ 11.658639] x14: 0000000000000000 x13: 0000000000000220 x12: 0000000000000000
[ 11.659286] x11: 0000000000000000 x10: ffff0000c1fdb2b0 x9: ffffdb2232ba5590
[ 11.659934] x8 : 00000000e5b906e6 x7 : ffff0000c2502778 x6 : ffffdb22339793d0
[ 11.660581] x5 : ffff80008192bc18 x4 : ffff0000c19cbca0 x3 : 0000000000000000
[ 11.661228] x2 : ffff0000c1fdaf40 x1 : ffffffffffffffed x0 : ffff0000c1eef000
[ 11.661878] Śledzenie połączeń:
[ 11.662103] __power_supply_is_supplied_by+0x18/0x100 (P)
[ 11.662596] __power_supply_am_i_supplied+0x40/0xb8
[ 11.663040] psy_for_each_psy_cb+0x20/0x40
[ 11.663416] klasa_dla_każdego_urządzenia+0x110/0x150
[ 11.663825] power_supply_am_i_supplied+0x68/0x100
[ 11.664262] bq257xx_external_power_changed+0x58/0x140
[ 11.664733] __power_supply_changed_work+0x60/0x80
[ 11.665170] psy_for_each_psy_cb+0x20/0x40
[ 11.665545] klasa_dla_każdego_urządzenia+0x110/0x150
[ 11.665953] power_supply_changed_work+0x98/0x1b8
[ 11.666382] proces_jeden_praca+0x164/0x4c0
[ 11.666758] wątek_pracownika+0x19c/0x320
[ 11.667104] kwątek+0x138/0x150
[ 11.667408] ret_from_fork+0x10/0x20
[ 11.667744] Kod: d503233f a9bd7bfd 910003fd a90153f3 (f9400c34)
[ 11.668294] ---[ ślad końcowy 0000000000000000 ]---

Dodaj semafor odczytu i zapisu pomiędzy external_power_changed() i
power_supply_unregister(), aby zapobiec powrotowi tego ostatniego (a tym samym
uniemożliwienie kierowcy zwolnienia danych), podczas gdy wywołanie zwrotne jest nadal uruchomione.

>_ 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