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

Commit 3288d735 authored by joshua.a.hay@intel.com's avatar joshua.a.hay@intel.com Committed by Jeff Kirsher
Browse files

ixgbe: eliminate Smatch warnings in ixgbe_debugfs.c



This patch replaces calls to copy_to_user, copy_from_user, and the associated
logic, with calls to simple_read_from_buffer and simple_write_to_buffer
respectively.  This was done to eliminate warnings generated by the Smatch
static analysis tool.

v2- Fix return values based community feedback

Reported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
CC: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarJosh Hay <joshua.a.hay@intel.com>
Tested-by: default avatarPhil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 1b4c44e6
Loading
Loading
Loading
Loading
+46 −37
Original line number Diff line number Diff line
@@ -47,23 +47,27 @@ static ssize_t ixgbe_dbg_reg_ops_read(struct file *filp, char __user *buffer,
				    size_t count, loff_t *ppos)
{
	struct ixgbe_adapter *adapter = filp->private_data;
	char buf[256];
	int bytes_not_copied;
	char *buf;
	int len;

	/* don't allow partial reads */
	if (*ppos != 0)
		return 0;

	len = snprintf(buf, sizeof(buf), "%s: %s\n",
		       adapter->netdev->name, ixgbe_dbg_reg_ops_buf);
	if (count < len)
	buf = kasprintf(GFP_KERNEL, "%s: %s\n",
			adapter->netdev->name,
			ixgbe_dbg_reg_ops_buf);
	if (!buf)
		return -ENOMEM;

	if (count < strlen(buf)) {
		kfree(buf);
		return -ENOSPC;
	bytes_not_copied = copy_to_user(buffer, buf, len);
	if (bytes_not_copied < 0)
		return bytes_not_copied;
	}

	*ppos = len;
	len = simple_read_from_buffer(buffer, count, ppos, buf, strlen(buf));

	kfree(buf);
	return len;
}

@@ -79,7 +83,7 @@ static ssize_t ixgbe_dbg_reg_ops_write(struct file *filp,
				     size_t count, loff_t *ppos)
{
	struct ixgbe_adapter *adapter = filp->private_data;
	int bytes_not_copied;
	int len;

	/* don't allow partial writes */
	if (*ppos != 0)
@@ -87,14 +91,15 @@ static ssize_t ixgbe_dbg_reg_ops_write(struct file *filp,
	if (count >= sizeof(ixgbe_dbg_reg_ops_buf))
		return -ENOSPC;

	bytes_not_copied = copy_from_user(ixgbe_dbg_reg_ops_buf, buffer, count);
	if (bytes_not_copied < 0)
		return bytes_not_copied;
	else if (bytes_not_copied < count)
		count -= bytes_not_copied;
	else
		return -ENOSPC;
	ixgbe_dbg_reg_ops_buf[count] = '\0';
	len = simple_write_to_buffer(ixgbe_dbg_reg_ops_buf,
				     sizeof(ixgbe_dbg_reg_ops_buf)-1,
				     ppos,
				     buffer,
				     count);
	if (len < 0)
		return len;

	ixgbe_dbg_reg_ops_buf[len] = '\0';

	if (strncmp(ixgbe_dbg_reg_ops_buf, "write", 5) == 0) {
		u32 reg, value;
@@ -147,23 +152,27 @@ static ssize_t ixgbe_dbg_netdev_ops_read(struct file *filp,
					 size_t count, loff_t *ppos)
{
	struct ixgbe_adapter *adapter = filp->private_data;
	char buf[256];
	int bytes_not_copied;
	char *buf;
	int len;

	/* don't allow partial reads */
	if (*ppos != 0)
		return 0;

	len = snprintf(buf, sizeof(buf), "%s: %s\n",
		       adapter->netdev->name, ixgbe_dbg_netdev_ops_buf);
	if (count < len)
	buf = kasprintf(GFP_KERNEL, "%s: %s\n",
			adapter->netdev->name,
			ixgbe_dbg_netdev_ops_buf);
	if (!buf)
		return -ENOMEM;

	if (count < strlen(buf)) {
		kfree(buf);
		return -ENOSPC;
	bytes_not_copied = copy_to_user(buffer, buf, len);
	if (bytes_not_copied < 0)
		return bytes_not_copied;
	}

	*ppos = len;
	len = simple_read_from_buffer(buffer, count, ppos, buf, strlen(buf));

	kfree(buf);
	return len;
}

@@ -179,7 +188,7 @@ static ssize_t ixgbe_dbg_netdev_ops_write(struct file *filp,
					  size_t count, loff_t *ppos)
{
	struct ixgbe_adapter *adapter = filp->private_data;
	int bytes_not_copied;
	int len;

	/* don't allow partial writes */
	if (*ppos != 0)
@@ -187,15 +196,15 @@ static ssize_t ixgbe_dbg_netdev_ops_write(struct file *filp,
	if (count >= sizeof(ixgbe_dbg_netdev_ops_buf))
		return -ENOSPC;

	bytes_not_copied = copy_from_user(ixgbe_dbg_netdev_ops_buf,
					  buffer, count);
	if (bytes_not_copied < 0)
		return bytes_not_copied;
	else if (bytes_not_copied < count)
		count -= bytes_not_copied;
	else
		return -ENOSPC;
	ixgbe_dbg_netdev_ops_buf[count] = '\0';
	len = simple_write_to_buffer(ixgbe_dbg_netdev_ops_buf,
				     sizeof(ixgbe_dbg_netdev_ops_buf)-1,
				     ppos,
				     buffer,
				     count);
	if (len < 0)
		return len;

	ixgbe_dbg_netdev_ops_buf[len] = '\0';

	if (strncmp(ixgbe_dbg_netdev_ops_buf, "tx_timeout", 10) == 0) {
		adapter->netdev->netdev_ops->ndo_tx_timeout(adapter->netdev);