diff options
author | joshua.a.hay@intel.com <joshua.a.hay@intel.com> | 2012-11-28 00:49:20 -0500 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2012-12-01 05:29:19 -0500 |
commit | 3288d735781f8873775e5d2e5d33507119f79cca (patch) | |
tree | 39ace5c2974a14195aec3d55caa9619a68071aee | |
parent | 1b4c44e6369dbbafd113f1e00b406f1eda5ab5b2 (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.c | 83 |
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); |