On Mon, 20 May 2019 09:16:18 +0200
Frederic Barrat <fbar...@linux.ibm.com> wrote:

> If we couldn't fully init a context, we were leaking memory.
> 
> Fixes: b9721d275cc2 ("ocxl: Allow external drivers to use OpenCAPI contexts")

Oops... missed that during review :-\

> Signed-off-by: Frederic Barrat <fbar...@linux.ibm.com>
> ---
> 
> Changelog:
> v2: reset context pointer in case of allocation failure (Andrew)
> 

Alternatively you could change the code to do:

        ctx = kzalloc(sizeof(struct ocxl_context), GFP_KERNEL);
        if (!ctx)
                return -ENOMEM;
        .
        .
        .
        if (pasid < 0) {
                mutex_unlock(&afu->contexts_lock);
                kfree(ctx);
                return pasid;
        }
        .
        .
        .
        *context = ctx;
        return 0;
}

This has the advantage of clearing any risk of side-effect with
*context forever, which is a safer practice IMHO.

Patch is correct anyway, so:

Reviewed-by: Greg Kurz <gr...@kaod.org>

>  drivers/misc/ocxl/context.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/misc/ocxl/context.c b/drivers/misc/ocxl/context.c
> index bab9c9364184..24e4fb010275 100644
> --- a/drivers/misc/ocxl/context.c
> +++ b/drivers/misc/ocxl/context.c
> @@ -22,6 +22,8 @@ int ocxl_context_alloc(struct ocxl_context **context, 
> struct ocxl_afu *afu,
>                       afu->pasid_base + afu->pasid_max, GFP_KERNEL);
>       if (pasid < 0) {
>               mutex_unlock(&afu->contexts_lock);
> +             kfree(*context);
> +             *context = NULL;
>               return pasid;
>       }
>       afu->pasid_count++;

Reply via email to