Commit bb43c8e3 authored by Sudip Mukherjee's avatar Sudip Mukherjee Committed by Jason Gunthorpe

RDMA/rxe: Always return ERR_PTR from rxe_create_mmap_info()

The commit below modified rxe_create_mmap_info() to return ERR_PTR's but
didn't update the callers to handle them. Modify rxe_create_mmap_info() to
only return ERR_PTR and fix all error checking after
rxe_create_mmap_info() is called.

Ensure that all other exit paths properly set the error return.

Fixes: ff23dfa1 ("IB: Pass only ib_udata in function prototypes")
Link: https://lore.kernel.org/r/20200425233545.17210-1-sudipm.mukherjee@gmail.com
Link: https://lore.kernel.org/r/20200511183742.GB225608@mwanda
Cc: stable@vger.kernel.org [5.4+]
Signed-off-by: default avatarSudip Mukherjee <sudipm.mukherjee@gmail.com>
Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 37e31d2d
...@@ -151,7 +151,7 @@ struct rxe_mmap_info *rxe_create_mmap_info(struct rxe_dev *rxe, u32 size, ...@@ -151,7 +151,7 @@ struct rxe_mmap_info *rxe_create_mmap_info(struct rxe_dev *rxe, u32 size,
ip = kmalloc(sizeof(*ip), GFP_KERNEL); ip = kmalloc(sizeof(*ip), GFP_KERNEL);
if (!ip) if (!ip)
return NULL; return ERR_PTR(-ENOMEM);
size = PAGE_ALIGN(size); size = PAGE_ALIGN(size);
......
...@@ -45,12 +45,15 @@ int do_mmap_info(struct rxe_dev *rxe, struct mminfo __user *outbuf, ...@@ -45,12 +45,15 @@ int do_mmap_info(struct rxe_dev *rxe, struct mminfo __user *outbuf,
if (outbuf) { if (outbuf) {
ip = rxe_create_mmap_info(rxe, buf_size, udata, buf); ip = rxe_create_mmap_info(rxe, buf_size, udata, buf);
if (!ip) if (IS_ERR(ip)) {
err = PTR_ERR(ip);
goto err1; goto err1;
}
err = copy_to_user(outbuf, &ip->info, sizeof(ip->info)); if (copy_to_user(outbuf, &ip->info, sizeof(ip->info))) {
if (err) err = -EFAULT;
goto err2; goto err2;
}
spin_lock_bh(&rxe->pending_lock); spin_lock_bh(&rxe->pending_lock);
list_add(&ip->pending_mmaps, &rxe->pending_mmaps); list_add(&ip->pending_mmaps, &rxe->pending_mmaps);
...@@ -64,7 +67,7 @@ int do_mmap_info(struct rxe_dev *rxe, struct mminfo __user *outbuf, ...@@ -64,7 +67,7 @@ int do_mmap_info(struct rxe_dev *rxe, struct mminfo __user *outbuf,
err2: err2:
kfree(ip); kfree(ip);
err1: err1:
return -EINVAL; return err;
} }
inline void rxe_queue_reset(struct rxe_queue *q) inline void rxe_queue_reset(struct rxe_queue *q)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment