On Mon, 9 Dec 2019 11:55:13 +0100 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") > Signed-off-by: Frederic Barrat <fbar...@linux.ibm.com> > --- Reviewed-by: Greg Kurz <gr...@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);