CVE-2026-46270
Beschrijving NL
In de Linux kernel is de volgende kwetsbaarheid verholpen:
power: voeding: rt9455: Fix use-after-free in power_supply_changed()
De `devm_` -variant gebruiken voor het aanvragen van IRQ _before_ the `devm_`
variant voor het toewijzen/registreren van de `power_supply` handle, betekent dat
de `power_supply` -handgreep zal worden ontkoppeld/ongeregistreerd _voor_ de
onderbrekingshandler (aangezien `devm_` van nature in omgekeerde volgorde
toewijzingsorder). Dit betekent dat er tijdens het verwijderen een race
toestand waarin een interrupt net _na_ de `voeding` kan vuren
handvat is vrijgemaakt, *maar* just _before_ the corresponding
de uitschrijving van de IRQ-handler is uitgevoerd. Dit zal ertoe leiden dat de IRQ-handler `power_supply_changed()` aanroept met
een vrijgekomen `power_supply` handgreep. Waarmee het systeem meestal crasht of
corrumpeert anders geruisloos het geheugen... Merk op dat er een vergelijkbare situatie is die ook kan optreden tijdens
`probe()`; de mogelijkheid van een onderbrekingsvuur _voor_ registratie
de `power_supply` handgreep. Dit zou dan leiden tot de vervelende situatie
van het gebruik van de `power_supply` -greep *niet-geïnitialiseerd* in
`power_supply_changed()`. Los deze pittige use-after-free op door ervoor te zorgen dat de IRQ wordt aangevraagd _after_
de registratie van de `power_supply` handle.
Origineel (Engels) tonen
In the Linux kernel, the following vulnerability has been resolved:
power: supply: rt9455: Fix use-after-free in power_supply_changed()
Using the `devm_` variant for requesting IRQ _before_ the `devm_`
variant for allocating/registering the `power_supply` handle, means that
the `power_supply` handle will be deallocated/unregistered _before_ the
interrupt handler (since `devm_` naturally deallocates in reverse
allocation order). This means that during removal, there is a race
condition where an interrupt can fire just _after_ the `power_supply`
handle has been freed, *but* just _before_ the corresponding
unregistration of the IRQ handler has run.
This will lead to the IRQ handler calling `power_supply_changed()` with
a freed `power_supply` handle. Which usually crashes the system or
otherwise silently corrupts the memory...
Note that there is a similar situation which can also happen during
`probe()`; the possibility of an interrupt firing _before_ registering
the `power_supply` handle. This would then lead to the nasty situation
of using the `power_supply` handle *uninitialized* in
`power_supply_changed()`.
Fix this racy use-after-free by making sure the IRQ is requested _after_
the registration of the `power_supply` handle.