diff mbox series

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

Message ID 20191209105513.8566-1-fbarrat@linux.ibm.com (mailing list archive)
State Accepted
Commit 913e73c77d48aeeb50c16450a653dca9c71ae2e2
Headers show
Series [v3] ocxl: Fix potential memory leak on context creation | expand

Checks

Context Check Description
snowpatch_ozlabs/apply_patch success Successfully applied on branch powerpc/merge (42159d2de18ffa66c2714d988a8c162db8b03956)
snowpatch_ozlabs/build-ppc64le success Build succeeded
snowpatch_ozlabs/build-ppc64be success Build succeeded
snowpatch_ozlabs/build-ppc64e success Build succeeded
snowpatch_ozlabs/build-pmac32 success Build succeeded
snowpatch_ozlabs/checkpatch success total: 0 errors, 0 warnings, 0 checks, 28 lines checked

Commit Message

Frederic Barrat Dec. 9, 2019, 10:55 a.m. UTC
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@linux.ibm.com>
---
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(-)

Comments

Andrew Donnellan Dec. 9, 2019, 1:32 p.m. UTC | #1
On 9/12/19 9:55 pm, Frederic Barrat 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@linux.ibm.com>

Acked-by: Andrew Donnellan <ajd@linux.ibm.com>
Greg Kurz Dec. 9, 2019, 8:51 p.m. UTC | #2
On Mon,  9 Dec 2019 11:55:13 +0100
Frederic Barrat <fbarrat@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@linux.ibm.com>
> ---

Reviewed-by: Greg Kurz <groug@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);
Michael Ellerman Dec. 18, 2019, 4:05 a.m. UTC | #3
On Mon, 2019-12-09 at 10:55:13 UTC, Frederic Barrat 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@linux.ibm.com>

Applied to powerpc fixes, thanks.

https://git.kernel.org/powerpc/c/913e73c77d48aeeb50c16450a653dca9c71ae2e2

cheers
diff mbox series

Patch

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);