Re: [PATCH rdma-next 03/14] RDMA/uverbs: Refactor flags checks and update return value

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Feb 14, 2018 at 02:38:33PM +0200, Leon Romanovsky wrote:
> From: Leon Romanovsky <leonro@xxxxxxxxxxxx>
> 
> Since commit f21519b23c1b ("IB/core: extended command: an
> improved infrastructure for uverbs commands"), the uverbs
> supports extra flags as an input to the command interface.
> 
> However actually, there is only one flag available and used,
> so it is better to refactor the code, so the resolution and
> report to the users is done as early as possible.
> 
> As part of this change, we changed the return value of failure case
> from ENOSYS to be EINVAL to be consistent with the rest flags checks.
> 
> Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx>
>  drivers/infiniband/core/uverbs_main.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c
> index 06ddb93f9c75..c12608b2d1cc 100644
> +++ b/drivers/infiniband/core/uverbs_main.c
> @@ -701,6 +701,11 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf,
>  		 IB_USER_VERBS_CMD_FLAGS_MASK) >> IB_USER_VERBS_CMD_FLAGS_SHIFT;
>  
>  	extended_command = flags & IB_USER_VERBS_CMD_FLAG_EXTENDED;
> +	if (flags & ~IB_USER_VERBS_CMD_FLAG_EXTENDED) {

This is not strict enough for flags checking.

It should be

 extended = hdr.command & IB_USER_VERBS_CMD_FLAG_EXTENDED <<  IB_USER_VERBS_CMD_FLAGS_SHIFT;
 flags = hdr.command & ~(u32)IB_USER_VERBS_CMD_COMMAND_MASK;
 if (flags != 0 && flags != IB_USER_VERBS_CMD_FLAG_EXTENDED << IB_USER_VERBS_CMD_FLAGS_SHIFT) {
     ret = -EINVAL;
     goto out;
 }

We need to check all the bits that are not command bits for validity.

Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux