aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjoshua.a.hay@intel.com <joshua.a.hay@intel.com>2012-11-28 00:49:20 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2012-12-01 05:29:19 -0500
commit3288d735781f8873775e5d2e5d33507119f79cca (patch)
tree39ace5c2974a14195aec3d55caa9619a68071aee
parent1b4c44e6369dbbafd113f1e00b406f1eda5ab5b2 (diff)
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: Dan Carpenter <dan.carpenter@oracle.com> CC: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Josh Hay <joshua.a.hay@intel.com> Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_debugfs.c83
1 files changed, 46 insertions, 37 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_debugfs.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_debugfs.c
index efaf9a73cc79..50aa546b8c7a 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_debugfs.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_debugfs.c
@@ -47,23 +47,27 @@ static ssize_t ixgbe_dbg_reg_ops_read(struct file *filp, char __user *buffer,
47 size_t count, loff_t *ppos) 47 size_t count, loff_t *ppos)
48{ 48{
49 struct ixgbe_adapter *adapter = filp->private_data; 49 struct ixgbe_adapter *adapter = filp->private_data;
50 char buf[256]; 50 char *buf;
51 int bytes_not_copied;
52 int len; 51 int len;
53 52
54 /* don't allow partial reads */ 53 /* don't allow partial reads */
55 if (*ppos != 0) 54 if (*ppos != 0)
56 return 0; 55 return 0;
57 56
58 len = snprintf(buf, sizeof(buf), "%s: %s\n", 57 buf = kasprintf(GFP_KERNEL, "%s: %s\n",
59 adapter->netdev->name, ixgbe_dbg_reg_ops_buf); 58 adapter->netdev->name,
60 if (count < len) 59 ixgbe_dbg_reg_ops_buf);
60 if (!buf)
61 return -ENOMEM;
62
63 if (count < strlen(buf)) {
64 kfree(buf);
61 return -ENOSPC; 65 return -ENOSPC;
62 bytes_not_copied = copy_to_user(buffer, buf, len); 66 }
63 if (bytes_not_copied < 0) 67
64 return bytes_not_copied; 68 len = simple_read_from_buffer(buffer, count, ppos, buf, strlen(buf));
65 69
66 *ppos = len; 70 kfree(buf);
67 return len; 71 return len;
68} 72}
69 73
@@ -79,7 +83,7 @@ static ssize_t ixgbe_dbg_reg_ops_write(struct file *filp,
79 size_t count, loff_t *ppos) 83 size_t count, loff_t *ppos)
80{ 84{
81 struct ixgbe_adapter *adapter = filp->private_data; 85 struct ixgbe_adapter *adapter = filp->private_data;
82 int bytes_not_copied; 86 int len;
83 87
84 /* don't allow partial writes */ 88 /* don't allow partial writes */
85 if (*ppos != 0) 89 if (*ppos != 0)
@@ -87,14 +91,15 @@ static ssize_t ixgbe_dbg_reg_ops_write(struct file *filp,
87 if (count >= sizeof(ixgbe_dbg_reg_ops_buf)) 91 if (count >= sizeof(ixgbe_dbg_reg_ops_buf))
88 return -ENOSPC; 92 return -ENOSPC;
89 93
90 bytes_not_copied = copy_from_user(ixgbe_dbg_reg_ops_buf, buffer, count); 94 len = simple_write_to_buffer(ixgbe_dbg_reg_ops_buf,
91 if (bytes_not_copied < 0) 95 sizeof(ixgbe_dbg_reg_ops_buf)-1,
92 return bytes_not_copied; 96 ppos,
93 else if (bytes_not_copied < count) 97 buffer,
94 count -= bytes_not_copied; 98 count);
95 else 99 if (len < 0)
96 return -ENOSPC; 100 return len;
97 ixgbe_dbg_reg_ops_buf[count] = '\0'; 101
102 ixgbe_dbg_reg_ops_buf[len] = '\0';
98 103
99 if (strncmp(ixgbe_dbg_reg_ops_buf, "write", 5) == 0) { 104 if (strncmp(ixgbe_dbg_reg_ops_buf, "write", 5) == 0) {
100 u32 reg, value; 105 u32 reg, value;
@@ -147,23 +152,27 @@ static ssize_t ixgbe_dbg_netdev_ops_read(struct file *filp,
147 size_t count, loff_t *ppos) 152 size_t count, loff_t *ppos)
148{ 153{
149 struct ixgbe_adapter *adapter = filp->private_data; 154 struct ixgbe_adapter *adapter = filp->private_data;
150 char buf[256]; 155 char *buf;
151 int bytes_not_copied;
152 int len; 156 int len;
153 157
154 /* don't allow partial reads */ 158 /* don't allow partial reads */
155 if (*ppos != 0) 159 if (*ppos != 0)
156 return 0; 160 return 0;
157 161
158 len = snprintf(buf, sizeof(buf), "%s: %s\n", 162 buf = kasprintf(GFP_KERNEL, "%s: %s\n",
159 adapter->netdev->name, ixgbe_dbg_netdev_ops_buf); 163 adapter->netdev->name,
160 if (count < len) 164 ixgbe_dbg_netdev_ops_buf);
165 if (!buf)
166 return -ENOMEM;
167
168 if (count < strlen(buf)) {
169 kfree(buf);
161 return -ENOSPC; 170 return -ENOSPC;
162 bytes_not_copied = copy_to_user(buffer, buf, len); 171 }
163 if (bytes_not_copied < 0) 172
164 return bytes_not_copied; 173 len = simple_read_from_buffer(buffer, count, ppos, buf, strlen(buf));
165 174
166 *ppos = len; 175 kfree(buf);
167 return len; 176 return len;
168} 177}
169 178
@@ -179,7 +188,7 @@ static ssize_t ixgbe_dbg_netdev_ops_write(struct file *filp,
179 size_t count, loff_t *ppos) 188 size_t count, loff_t *ppos)
180{ 189{
181 struct ixgbe_adapter *adapter = filp->private_data; 190 struct ixgbe_adapter *adapter = filp->private_data;
182 int bytes_not_copied; 191 int len;
183 192
184 /* don't allow partial writes */ 193 /* don't allow partial writes */
185 if (*ppos != 0) 194 if (*ppos != 0)
@@ -187,15 +196,15 @@ static ssize_t ixgbe_dbg_netdev_ops_write(struct file *filp,
187 if (count >= sizeof(ixgbe_dbg_netdev_ops_buf)) 196 if (count >= sizeof(ixgbe_dbg_netdev_ops_buf))
188 return -ENOSPC; 197 return -ENOSPC;
189 198
190 bytes_not_copied = copy_from_user(ixgbe_dbg_netdev_ops_buf, 199 len = simple_write_to_buffer(ixgbe_dbg_netdev_ops_buf,
191 buffer, count); 200 sizeof(ixgbe_dbg_netdev_ops_buf)-1,
192 if (bytes_not_copied < 0) 201 ppos,
193 return bytes_not_copied; 202 buffer,
194 else if (bytes_not_copied < count) 203 count);
195 count -= bytes_not_copied; 204 if (len < 0)
196 else 205 return len;
197 return -ENOSPC; 206
198 ixgbe_dbg_netdev_ops_buf[count] = '\0'; 207 ixgbe_dbg_netdev_ops_buf[len] = '\0';
199 208
200 if (strncmp(ixgbe_dbg_netdev_ops_buf, "tx_timeout", 10) == 0) { 209 if (strncmp(ixgbe_dbg_netdev_ops_buf, "tx_timeout", 10) == 0) {
201 adapter->netdev->netdev_ops->ndo_tx_timeout(adapter->netdev); 210 adapter->netdev->netdev_ops->ndo_tx_timeout(adapter->netdev);