RE: [PATCH v2] RDMA/rxe: check for error

From: Yanjun Zhu
Date: Sun Apr 26 2020 - 22:34:25 EST


In the commit log,

ff23dfa13457 ("IB: Pass only ib_udata in function prototypes") is better than commit 'ff23dfa13457'?


-----Original Message-----
From: Sudip Mukherjee <sudipm.mukherjee@xxxxxxxxx>
Sent: Sunday, April 26, 2020 7:36 AM
To: Yanjun Zhu <yanjunz@xxxxxxxxxxxx>; Doug Ledford <dledford@xxxxxxxxxx>; Jason Gunthorpe <jgg@xxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx; linux-rdma@xxxxxxxxxxxxxxx; Sudip Mukherjee <sudipm.mukherjee@xxxxxxxxx>
Subject: [PATCH v2] RDMA/rxe: check for error

The commit 'ff23dfa13457' modified rxe_create_mmap_info() to return error code and also NULL but missed fixing codes which called rxe_create_mmap_info(). Modify rxe_create_mmap_info() to only return errorcode and fix error checking after rxe_create_mmap_info() was called.

Fixes: ff23dfa13457 ("IB: Pass only ib_udata in function prototypes")
Cc: stable@xxxxxxxxxxxxxxx [5.4+]
Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@xxxxxxxxx>
---
drivers/infiniband/sw/rxe/rxe_mmap.c | 2 +- drivers/infiniband/sw/rxe/rxe_queue.c | 6 ++++--
2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/infiniband/sw/rxe/rxe_mmap.c b/drivers/infiniband/sw/rxe/rxe_mmap.c
index 48f48122ddcb..6a413d73b95d 100644
--- a/drivers/infiniband/sw/rxe/rxe_mmap.c
+++ b/drivers/infiniband/sw/rxe/rxe_mmap.c
@@ -151,7 +151,7 @@ struct rxe_mmap_info *rxe_create_mmap_info(struct rxe_dev *rxe, u32 size,

ip = kmalloc(sizeof(*ip), GFP_KERNEL);
if (!ip)
- return NULL;
+ return ERR_PTR(-ENOMEM);

size = PAGE_ALIGN(size);

diff --git a/drivers/infiniband/sw/rxe/rxe_queue.c b/drivers/infiniband/sw/rxe/rxe_queue.c
index ff92704de32f..fef2ab5112de 100644
--- a/drivers/infiniband/sw/rxe/rxe_queue.c
+++ b/drivers/infiniband/sw/rxe/rxe_queue.c
@@ -45,8 +45,10 @@ int do_mmap_info(struct rxe_dev *rxe, struct mminfo __user *outbuf,

if (outbuf) {
ip = rxe_create_mmap_info(rxe, buf_size, udata, buf);
- if (!ip)
+ if (IS_ERR(ip)) {
+ err = PTR_ERR(ip);
goto err1;
+ }

err = copy_to_user(outbuf, &ip->info, sizeof(ip->info));
if (err)
@@ -64,7 +66,7 @@ int do_mmap_info(struct rxe_dev *rxe, struct mminfo __user *outbuf,
err2:
kfree(ip);
err1:
- return -EINVAL;
+ return err;
}

inline void rxe_queue_reset(struct rxe_queue *q)
--
2.11.0