Re: [PATCH v2 2/3] firmware/edd: use kobject_put() on edd_device_register() failure
Sourabh Jain <[email protected]>
| Newsgroups | org.ozlabs.lists.linuxppc-dev,dev.linux.lists.driver-core,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 13/08/26 15:24, Tarun Sahu wrote: > When edd_device_register() fails after initializing the kobject with > kobject_init_and_add(), calling kfree(edev) directly bypasses the > kobject release callback (edd_release) and leaks the allocated kobject > resources. > > Fix this by replacing direct kfree(edev) with kobject_put(&edev->kobj) on > registration failure. > > Signed-off-by: Tarun Sahu <[email protected]> > --- > drivers/firmware/edd.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/firmware/edd.c b/drivers/firmware/edd.c > index f980c5b56858..763e7b16d517 100644 > --- a/drivers/firmware/edd.c > +++ b/drivers/firmware/edd.c > @@ -748,7 +748,7 @@ edd_init(void) > > rc = edd_device_register(edev, i); > if (rc) { > - kfree(edev); > + kobject_put(&edev->kobj); The EDD device is registered with a ktype that has a release function, so it is better to call kobject_put() to release edev instead of freeing the memory manually. Changes look good to me. Feel free to add: Reviewed-by: Sourabh Jain <[email protected]> > goto out; > } > edd_devices[i] = edev;