All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch] i40e: fix copy_from_user() error handling
@ 2013-09-13  8:12 Dan Carpenter
  0 siblings, 0 replies; only message in thread
From: Dan Carpenter @ 2013-09-13  8:12 UTC (permalink / raw)
  To: kernel-janitors

There can never be a negative number of bytes_not_copied.  Also return
-EFAULT on error.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>

diff --git a/drivers/net/ethernet/intel/i40e/i40e_debugfs.c b/drivers/net/ethernet/intel/i40e/i40e_debugfs.c
index 8dbd91f..de9f60d 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_debugfs.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_debugfs.c
@@ -93,7 +93,6 @@ static ssize_t i40e_dbg_dump_buffer_len;
 static ssize_t i40e_dbg_dump_read(struct file *filp, char __user *buffer,
 				  size_t count, loff_t *ppos)
 {
-	int bytes_not_copied;
 	int len;
 
 	/* is *ppos bigger than the available data? */
@@ -103,9 +102,8 @@ static ssize_t i40e_dbg_dump_read(struct file *filp, char __user *buffer,
 	/* be sure to not read beyond the end of available data */
 	len = min_t(int, count, (i40e_dbg_dump_data_len - *ppos));
 
-	bytes_not_copied = copy_to_user(buffer, &i40e_dbg_dump_buf[*ppos], len);
-	if (bytes_not_copied < 0)
-		return bytes_not_copied;
+	if (copy_to_user(buffer, &i40e_dbg_dump_buf[*ppos], len))
+		return -EFAULT;
 
 	*ppos += len;
 	return len;
@@ -153,7 +151,6 @@ static ssize_t i40e_dbg_dump_write(struct file *filp,
 	struct i40e_pf *pf = filp->private_data;
 	char dump_request_buf[16];
 	bool seid_found = false;
-	int bytes_not_copied;
 	long seid = -1;
 	int buflen = 0;
 	int i, ret;
@@ -166,11 +163,8 @@ static ssize_t i40e_dbg_dump_write(struct file *filp,
 	if (count >= sizeof(dump_request_buf))
 		return -ENOSPC;
 
-	bytes_not_copied = copy_from_user(dump_request_buf, buffer, count);
-	if (bytes_not_copied < 0)
-		return bytes_not_copied;
-	if (bytes_not_copied > 0)
-		count -= bytes_not_copied;
+	if (copy_from_user(dump_request_buf, buffer, count))
+		return -EFAULT;
 	dump_request_buf[count] = '\0';
 
 	/* decode the SEID given to be dumped */
@@ -357,9 +351,8 @@ static ssize_t i40e_dbg_command_read(struct file *filp, char __user *buffer,
 
 	bytes_not_copied = copy_to_user(buffer, buf, len);
 	kfree(buf);
-
-	if (bytes_not_copied < 0)
-		return bytes_not_copied;
+	if (bytes_not_copied)
+		return -EFAULT;
 
 	*ppos = len;
 	return len;
@@ -1028,7 +1021,6 @@ static ssize_t i40e_dbg_command_write(struct file *filp,
 				      size_t count, loff_t *ppos)
 {
 	struct i40e_pf *pf = filp->private_data;
-	int bytes_not_copied;
 	struct i40e_vsi *vsi;
 	u8 *print_buf_start;
 	u8 *print_buf;
@@ -1044,11 +1036,8 @@ static ssize_t i40e_dbg_command_write(struct file *filp,
 	cmd_buf = kzalloc(count + 1, GFP_KERNEL);
 	if (!cmd_buf)
 		return count;
-	bytes_not_copied = copy_from_user(cmd_buf, buffer, count);
-	if (bytes_not_copied < 0)
-		return bytes_not_copied;
-	if (bytes_not_copied > 0)
-		count -= bytes_not_copied;
+	if (copy_from_user(cmd_buf, buffer, count))
+		return -EFAULT;
 	cmd_buf[count] = '\0';
 
 	print_buf_start = kzalloc(I40E_MAX_DEBUG_OUT_BUFFER, GFP_KERNEL);
@@ -1881,9 +1870,8 @@ static ssize_t i40e_dbg_netdev_ops_read(struct file *filp, char __user *buffer,
 
 	bytes_not_copied = copy_to_user(buffer, buf, len);
 	kfree(buf);
-
-	if (bytes_not_copied < 0)
-		return bytes_not_copied;
+	if (bytes_not_copied)
+		return -EFAULT;
 
 	*ppos = len;
 	return len;
@@ -1901,7 +1889,6 @@ static ssize_t i40e_dbg_netdev_ops_write(struct file *filp,
 					 size_t count, loff_t *ppos)
 {
 	struct i40e_pf *pf = filp->private_data;
-	int bytes_not_copied;
 	struct i40e_vsi *vsi;
 	int vsi_seid;
 	int i, cnt;
@@ -1913,12 +1900,8 @@ static ssize_t i40e_dbg_netdev_ops_write(struct file *filp,
 		return -ENOSPC;
 
 	memset(i40e_dbg_netdev_ops_buf, 0, sizeof(i40e_dbg_netdev_ops_buf));
-	bytes_not_copied = copy_from_user(i40e_dbg_netdev_ops_buf,
-					  buffer, count);
-	if (bytes_not_copied < 0)
-		return bytes_not_copied;
-	else if (bytes_not_copied > 0)
-		count -= bytes_not_copied;
+	if (copy_from_user(i40e_dbg_netdev_ops_buf, buffer, count))
+		return -EFAULT;
 	i40e_dbg_netdev_ops_buf[count] = '\0';
 
 	if (strncmp(i40e_dbg_netdev_ops_buf, "tx_timeout", 10) = 0) {

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2013-09-13  8:12 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-09-13  8:12 [patch] i40e: fix copy_from_user() error handling Dan Carpenter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.