Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f1811cf6 authored by Ira Weiny's avatar Ira Weiny Committed by Greg Kroah-Hartman
Browse files

staging/rdma/hfi1: Further clean up hfi1_ioctl parameter checks



Final clean up of the if/then/else clause for the parameter checks of
hfi1_ioctl

Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarIra Weiny <ira.weiny@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent d8e499ff
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -982,24 +982,28 @@ static long hfi1_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)
	struct hfi1_pportdata *ppd = NULL;
	unsigned int index;
	struct hfi1_link_info link_info;
	int read_cmd, write_cmd, read_ok, write_ok;

	dd = hfi1_dd_from_sc_inode(fp->f_inode);
	if (!dd)
		return -ENODEV;

	mode_flag = dd->hfi1_snoop.mode_flag;
	read_cmd = _IOC_DIR(cmd) & _IOC_READ;
	write_cmd = _IOC_DIR(cmd) & _IOC_WRITE;
	write_ok = access_ok(VERIFY_WRITE, (void __user *)arg, _IOC_SIZE(cmd));
	read_ok = access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd));

	if (((_IOC_DIR(cmd) & _IOC_READ)
	    && !access_ok(VERIFY_WRITE, (void __user *)arg, _IOC_SIZE(cmd)))
	    || ((_IOC_DIR(cmd) & _IOC_WRITE)
	    && !access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd)))) {
	if ((read_cmd && !write_ok) || (write_cmd && !read_ok))
		return -EFAULT;
	} else if (!capable(CAP_SYS_ADMIN)) {

	if (!capable(CAP_SYS_ADMIN))
		return -EPERM;
	} else if ((mode_flag & HFI1_PORT_CAPTURE_MODE) &&

	if ((mode_flag & HFI1_PORT_CAPTURE_MODE) &&
	    (cmd != HFI1_SNOOP_IOCCLEARQUEUE) &&
	    (cmd != HFI1_SNOOP_IOCCLEARFILTER) &&
		   (cmd != HFI1_SNOOP_IOCSETFILTER)) {
	    (cmd != HFI1_SNOOP_IOCSETFILTER))
		/* Capture devices are allowed only 3 operations
		 * 1.Clear capture queue
		 * 2.Clear capture filter
@@ -1007,7 +1011,6 @@ static long hfi1_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)
		 * Other are invalid.
		 */
		return -EINVAL;
	}

	spin_lock_irqsave(&dd->hfi1_snoop.snoop_lock, flags);