summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Munsie <imunsie@au1.ibm.com>2014-12-08 09:17:57 +0100
committerMichael Ellerman <mpe@ellerman.id.au>2014-12-29 05:45:43 +0100
commit456295e284beb7b61a55ead9500d30f94ab06d52 (patch)
tree15b8ebab6eabf0c07cc3d585e998aa87e4872538
parentpowerpc/4xx: Fix return value check in hsta_msi_probe() (diff)
downloadlinux-456295e284beb7b61a55ead9500d30f94ab06d52.tar.xz
linux-456295e284beb7b61a55ead9500d30f94ab06d52.zip
cxl: Fix leaking interrupts if attach process fails
In this particular error path we have already allocated the AFU interrupts, but have not yet set the status to STARTED. The detach context code will only attempt to release the interrupts if the context is in state STARTED, so in this case the interrupts would remain allocated. This patch releases the AFU interrupts immediately if the attach call fails to prevent them leaking. Signed-off-by: Ian Munsie <imunsie@au1.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
-rw-r--r--drivers/misc/cxl/file.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/misc/cxl/file.c b/drivers/misc/cxl/file.c
index e9f2f10dbb37..b09be4462294 100644
--- a/drivers/misc/cxl/file.c
+++ b/drivers/misc/cxl/file.c
@@ -185,8 +185,10 @@ static long afu_ioctl_start_work(struct cxl_context *ctx,
ctx->pid = get_pid(get_task_pid(current, PIDTYPE_PID));
if ((rc = cxl_attach_process(ctx, false, work.work_element_descriptor,
- amr)))
+ amr))) {
+ afu_release_irqs(ctx);
goto out;
+ }
ctx->status = STARTED;
rc = 0;