Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

power: supply: bq27xxx: Fix kernel crash on IRQ handler register error

When registering the IRQ handler fails, do not just return the error code,
this will free the devm_kzalloc()-ed data struct while leaving the queued
work queued and the registered power_supply registered with both of them
now pointing to free-ed memory, resulting in various kernel crashes
soon afterwards.

Instead properly tear-down things on IRQ handler register errors.

Fixes: 703df6c09795 ("power: bq27xxx_battery: Reorganize I2C into a module")
Cc: Andrew F. Davis <afd@ti.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>

authored by

Hans de Goede and committed by
Sebastian Reichel
cdf10ffe 172d0cce

+2 -1
+2 -1
drivers/power/supply/bq27xxx_battery_i2c.c
··· 187 187 dev_err(&client->dev, 188 188 "Unable to register IRQ %d error %d\n", 189 189 client->irq, ret); 190 - return ret; 190 + bq27xxx_battery_teardown(di); 191 + goto err_failed; 191 192 } 192 193 } 193 194