| From ab1677d618922bf7bc91f9bbc2a3349a43ddbee5 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 12 Jan 2023 13:16:02 -0500 |
| Subject: IB/hfi1: Restore allocated resources on failed copyout |
| |
| From: Dean Luick <dean.luick@cornelisnetworks.com> |
| |
| [ Upstream commit 6601fc0d15ffc20654e39486f9bef35567106d68 ] |
| |
| Fix a resource leak if an error occurs. |
| |
| Fixes: f404ca4c7ea8 ("IB/hfi1: Refactor hfi_user_exp_rcv_setup() IOCTL") |
| Signed-off-by: Dean Luick <dean.luick@cornelisnetworks.com> |
| Signed-off-by: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com> |
| Link: https://lore.kernel.org/r/167354736291.2132367.10894218740150168180.stgit@awfm-02.cornelisnetworks.com |
| Signed-off-by: Leon Romanovsky <leon@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/infiniband/hw/hfi1/file_ops.c | 7 +++++-- |
| 1 file changed, 5 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/infiniband/hw/hfi1/file_ops.c b/drivers/infiniband/hw/hfi1/file_ops.c |
| index f5f9269fdc162..7c5d487ec9168 100644 |
| --- a/drivers/infiniband/hw/hfi1/file_ops.c |
| +++ b/drivers/infiniband/hw/hfi1/file_ops.c |
| @@ -1318,12 +1318,15 @@ static int user_exp_rcv_setup(struct hfi1_filedata *fd, unsigned long arg, |
| addr = arg + offsetof(struct hfi1_tid_info, tidcnt); |
| if (copy_to_user((void __user *)addr, &tinfo.tidcnt, |
| sizeof(tinfo.tidcnt))) |
| - return -EFAULT; |
| + ret = -EFAULT; |
| |
| addr = arg + offsetof(struct hfi1_tid_info, length); |
| - if (copy_to_user((void __user *)addr, &tinfo.length, |
| + if (!ret && copy_to_user((void __user *)addr, &tinfo.length, |
| sizeof(tinfo.length))) |
| ret = -EFAULT; |
| + |
| + if (ret) |
| + hfi1_user_exp_rcv_invalid(fd, &tinfo); |
| } |
| |
| return ret; |
| -- |
| 2.39.0 |
| |