]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
cxl: Fix + cleanup error paths in cxl_dev_context_init
authorIan Munsie <imunsie@au1.ibm.com>
Thu, 27 Aug 2015 09:50:18 +0000 (19:50 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Sun, 30 Aug 2015 08:47:26 +0000 (18:47 +1000)
If the cxl_context_alloc() call fails, we return immediately without
releasing the reference on the AFU device, allowing it to leak.

This patch switches to using goto style error handling so that the
device is released in common code for both error paths, and will also
simplify things if we add additional initialisation in this function in
the future.

Signed-off-by: Ian Munsie <imunsie@au1.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
drivers/misc/cxl/api.c

index f49e3e5db58d5a31752af4beb9550aa00866c420..005adc7d33a29c704a77da79b59b7fee36f8ac42 100644 (file)
@@ -25,19 +25,24 @@ struct cxl_context *cxl_dev_context_init(struct pci_dev *dev)
 
        get_device(&afu->dev);
        ctx = cxl_context_alloc();
-       if (IS_ERR(ctx))
-               return ctx;
+       if (IS_ERR(ctx)) {
+               rc = PTR_ERR(ctx);
+               goto err_dev;
+       }
 
        /* Make it a slave context.  We can promote it later? */
        rc = cxl_context_init(ctx, afu, false, NULL);
-       if (rc) {
-               kfree(ctx);
-               put_device(&afu->dev);
-               return ERR_PTR(-ENOMEM);
-       }
+       if (rc)
+               goto err_ctx;
        cxl_assign_psn_space(ctx);
 
        return ctx;
+
+err_ctx:
+       kfree(ctx);
+err_dev:
+       put_device(&afu->dev);
+       return ERR_PTR(rc);
 }
 EXPORT_SYMBOL_GPL(cxl_dev_context_init);