diff mbox series

IB/uverbs: Add a check for uverbs_attr_get

Message ID 20191018081533.8544-1-hslester96@gmail.com (mailing list archive)
State Mainlined
Commit a29e1012c1bf52c5364cad5ffbf5b4be8fe9c91b
Delegated to: Jason Gunthorpe
Headers show
Series IB/uverbs: Add a check for uverbs_attr_get | expand

Commit Message

Chuhong Yuan Oct. 18, 2019, 8:15 a.m. UTC
Only uverbs_copy_to_struct_or_zero in uverbs_ioctl.c does not have a
check for uverbs_attr_get.
Although its usage in uverbs_response has a check for attr's validity,
UVERBS_HANDLER does not.
Therefore, it is better to add a check like other functions in
uverbs_ioctl.c.

Signed-off-by: Chuhong Yuan <hslester96@gmail.com>
---
 drivers/infiniband/core/uverbs_ioctl.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Jason Gunthorpe Oct. 22, 2019, 7:12 p.m. UTC | #1
On Fri, Oct 18, 2019 at 04:15:34PM +0800, Chuhong Yuan wrote:
> Only uverbs_copy_to_struct_or_zero in uverbs_ioctl.c does not have a
> check for uverbs_attr_get.
> Although its usage in uverbs_response has a check for attr's validity,
> UVERBS_HANDLER does not.
> Therefore, it is better to add a check like other functions in
> uverbs_ioctl.c.
> 
> Signed-off-by: Chuhong Yuan <hslester96@gmail.com>
> ---
>  drivers/infiniband/core/uverbs_ioctl.c | 3 +++
>  1 file changed, 3 insertions(+)

The call in uverbs_ioctl.c is safe as well, that code path checks that
the attribute exists.

Still, it make sense that this check should be present, so applied to
for-next with a clearer commit message

Thanks,
Jason
diff mbox series

Patch

diff --git a/drivers/infiniband/core/uverbs_ioctl.c b/drivers/infiniband/core/uverbs_ioctl.c
index 61758201d9b2..269938f59d3f 100644
--- a/drivers/infiniband/core/uverbs_ioctl.c
+++ b/drivers/infiniband/core/uverbs_ioctl.c
@@ -795,6 +795,9 @@  int uverbs_copy_to_struct_or_zero(const struct uverbs_attr_bundle *bundle,
 {
 	const struct uverbs_attr *attr = uverbs_attr_get(bundle, idx);
 
+	if (IS_ERR(attr))
+		return PTR_ERR(attr);
+
 	if (size < attr->ptr_attr.len) {
 		if (clear_user(u64_to_user_ptr(attr->ptr_attr.data) + size,
 			       attr->ptr_attr.len - size))