On Sat, Jun 6, 2015 at 1:48 PM, Firo Yang <firogm@xxxxxxxxx> wrote: > Eliminate a memory leak by unifying the error handling code > at the end of the function. > > Signed-off-by: Firo Yang <firogm@xxxxxxxxx> Acked-by: Ming Lei <ming.lei@xxxxxxxxxxxxx> > --- > drivers/base/firmware_class.c | 19 ++++++++++++++----- > 1 file changed, 14 insertions(+), 5 deletions(-) > > diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c > index 8c3aa3c..5bb098b 100644 > --- a/drivers/base/firmware_class.c > +++ b/drivers/base/firmware_class.c > @@ -1299,6 +1299,7 @@ request_firmware_nowait( > const char *name, struct device *device, gfp_t gfp, void *context, > void (*cont)(const struct firmware *fw, void *context)) > { > + int rc; > struct firmware_work *fw_work; > > fw_work = kzalloc(sizeof(struct firmware_work), gfp); > @@ -1307,8 +1308,11 @@ request_firmware_nowait( > > fw_work->module = module; > fw_work->name = kstrdup_const(name, gfp); > - if (!fw_work->name) > - return -ENOMEM; > + if (!fw_work->name) { > + rc = -ENOMEM; > + goto free_work; > + } > + > fw_work->device = device; > fw_work->context = context; > fw_work->cont = cont; > @@ -1316,15 +1320,20 @@ request_firmware_nowait( > (uevent ? FW_OPT_UEVENT : FW_OPT_USERHELPER); > > if (!try_module_get(module)) { > - kfree_const(fw_work->name); > - kfree(fw_work); > - return -EFAULT; > + rc = -EFAULT; > + goto free_name; > } > > get_device(fw_work->device); > INIT_WORK(&fw_work->work, request_firmware_work_func); > schedule_work(&fw_work->work); > return 0; > + > +free_name: > + kfree_const(fw_work->name); > +free_work: > + kfree(fw_work); > + return rc; > } > EXPORT_SYMBOL(request_firmware_nowait); > > -- > 2.4.2 > -- To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html