Messages in this thread | | | Date | Tue, 7 Jul 2009 19:01:25 +0200 | From | Cornelia Huck <> | Subject | Re: Possible memory leak in request_firmware() |
| |
On Tue, 07 Jul 2009 16:17:00 +0100, Catalin Marinas <catalin.marinas@arm.com> wrote:
> The patch below may fix the problem but it's only later tonight that I > can test it and confirm:
Your patch looks fine to me (didn't test it either), just one minor nit:
> > > diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c > index ddeb819..12e6e64 100644 > --- a/drivers/base/firmware_class.c > +++ b/drivers/base/firmware_class.c > @@ -357,7 +357,7 @@ static void fw_dev_release(struct device *dev) > kfree(fw_priv->pages); > kfree(fw_priv->fw_id); > kfree(fw_priv); > - put_device(dev); > + kfree(dev); > > module_put(THIS_MODULE); > } > @@ -407,14 +407,13 @@ static int fw_register_device(struct device **dev_p, const char *fw_name, > retval = device_register(f_dev); > if (retval) { > dev_err(device, "%s: device_register failed\n", __func__); > + kfree(fw_priv->fw_id);
fw_priv->fw_id will be freed in the release function, so you don't need to free it here.
> put_device(f_dev); > - goto error_kfree_fw_id; > + return retval; > } > *dev_p = f_dev; > return 0; > > -error_kfree_fw_id: > - kfree(fw_priv->fw_id); > error_kfree: > kfree(f_dev); > kfree(fw_priv); > >
| |