In the Linux kernel, the following vulnerability has been resolved:
power: supply: bq27xxx-i2c: Do not free non existing IRQ
The bq27xxx i2c-client may not have an IRQ, in which case client->irq will be 0. bq27xxx_battery_i2c_probe() already has an if (client->irq) check wrapping the request_threaded_irq().
But bq27xxx_battery_i2c_remove() unconditionally calls free_irq(client->irq) leading to:
[ 190.310742] ------------[ cut here ]------------ [ 190.310843] Trying to free already-free IRQ 0 [ 190.310861] WARNING: CPU: 2 PID: 1304 at kernel/irq/manage.c:1893 free_irq+0x1b8/0x310
Followed by a backtrace when unbinding the driver. Add an if (client->irq) to bq27xxx_battery_i2c_remove() mirroring probe() to fix this.
| Software | From | Fixed in |
|---|---|---|
| linux / linux_kernel | 4.14.316 | 4.15 |
| linux / linux_kernel | 4.19.284 | 4.19.309 |
| linux / linux_kernel | 5.4.244 | 5.4.271 |
| linux / linux_kernel | 5.10.181 | 5.10.212 |
| linux / linux_kernel | 5.15.114 | 5.15.151 |
| linux / linux_kernel | 6.1.31 | 6.1.81 |
| linux / linux_kernel | 6.3.5 | 6.4 |
| linux / linux_kernel | 6.4.1 | 6.6.21 |
| linux / linux_kernel | 6.7 | 6.7.9 |
| linux / linux_kernel | 6.4 | 6.4.x |
| linux / linux_kernel | 6.4-rc4 | 6.4-rc4.x |
| linux / linux_kernel | 6.4-rc5 | 6.4-rc5.x |
| linux / linux_kernel | 6.4-rc6 | 6.4-rc6.x |
| linux / linux_kernel | 6.4-rc7 | 6.4-rc7.x |
| linux / linux_kernel | 6.8-rc1 | 6.8-rc1.x |
| linux / linux_kernel | 6.8-rc2 | 6.8-rc2.x |
| linux / linux_kernel | 6.8-rc3 | 6.8-rc3.x |
| linux / linux_kernel | 6.8-rc4 | 6.8-rc4.x |
| linux / linux_kernel | 6.8-rc5 | 6.8-rc5.x |
| linux / linux_kernel | 6.8-rc6 | 6.8-rc6.x |
| debian / debian_linux | 10.0 | 10.0.x |