Эх сурвалжийг харах

power_supply: Fix use after free and memory leak

device_unregister() might free its argument.  This leads to freed
memory use in kfree().  Also use put_device() instead of kfree()
as dev may be already used in another layer after call to device_add().

Signed-off-by: Vasiliy Kulikov <segoon@openwall.com>
Signed-off-by: Anton Vorontsov <cbouatmailru@gmail.com>
Vasiliy Kulikov 14 жил өмнө
parent
commit
3a2dbd611b

+ 2 - 2
drivers/power/power_supply_core.c

@@ -190,10 +190,10 @@ int power_supply_register(struct device *parent, struct power_supply *psy)
 	goto success;
 	goto success;
 
 
 create_triggers_failed:
 create_triggers_failed:
-	device_unregister(psy->dev);
+	device_del(dev);
 kobject_set_name_failed:
 kobject_set_name_failed:
 device_add_failed:
 device_add_failed:
-	kfree(dev);
+	put_device(dev);
 success:
 success:
 	return rc;
 	return rc;
 }
 }