Commit 913e73c7 authored by Frederic Barrat's avatar Frederic Barrat Committed by Michael Ellerman
Browse files

ocxl: Fix potential memory leak on context creation



If we couldn't fully init a context, we were leaking memory.

Fixes: b9721d27 ("ocxl: Allow external drivers to use OpenCAPI contexts")
Signed-off-by: default avatarFrederic Barrat <fbarrat@linux.ibm.com>
Acked-by: default avatarAndrew Donnellan <ajd@linux.ibm.com>
Reviewed-by: default avatarGreg Kurz <groug@kaod.org>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20191209105513.8566-1-fbarrat@linux.ibm.com
parent 099bc481
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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);