[PATCH v3] ocxl: Fix potential memory leak on context creation

Greg Kurz groug at kaod.org
Tue Dec 10 07:51:39 AEDT 2019


On Mon,  9 Dec 2019 11:55:13 +0100
Frederic Barrat <fbarrat at 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")
> Signed-off-by: Frederic Barrat <fbarrat at linux.ibm.com>
> ---

Reviewed-by: Greg Kurz <groug at kaod.org>

> Changlog:
> v3:
> 	code cleanup (Greg)
> v2:
> 	reset context pointer in case of allocation failure (Andrew)
> 
> 
>  drivers/misc/ocxl/context.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/misc/ocxl/context.c b/drivers/misc/ocxl/context.c
> index 994563a078eb..de8a66b9d76b 100644
> --- a/drivers/misc/ocxl/context.c
> +++ b/drivers/misc/ocxl/context.c
> @@ -10,18 +10,17 @@ int ocxl_context_alloc(struct ocxl_context **context, struct ocxl_afu *afu,
>  	int pasid;
>  	struct ocxl_context *ctx;
>  
> -	*context = kzalloc(sizeof(struct ocxl_context), GFP_KERNEL);
> -	if (!*context)
> +	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
> +	if (!ctx)
>  		return -ENOMEM;
>  
> -	ctx = *context;
> -
>  	ctx->afu = afu;
>  	mutex_lock(&afu->contexts_lock);
>  	pasid = idr_alloc(&afu->contexts_idr, ctx, afu->pasid_base,
>  			afu->pasid_base + afu->pasid_max, GFP_KERNEL);
>  	if (pasid < 0) {
>  		mutex_unlock(&afu->contexts_lock);
> +		kfree(ctx);
>  		return pasid;
>  	}
>  	afu->pasid_count++;
> @@ -43,6 +42,7 @@ int ocxl_context_alloc(struct ocxl_context **context, struct ocxl_afu *afu,
>  	 * duration of the life of the context
>  	 */
>  	ocxl_afu_get(afu);
> +	*context = ctx;
>  	return 0;
>  }
>  EXPORT_SYMBOL_GPL(ocxl_context_alloc);



More information about the Linuxppc-dev mailing list