Re: [PATCH v3] firmware: Fix memory leak in error path

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Kernel Development]     [Kernel Announce]     [Kernel Newbies]     [Linux Networking Development]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Device Mapper]

  Powered by Linux