aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>2013-04-10 07:01:18 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-04-10 14:10:34 -0400
commitfe29f54cd574eab7b521445419f355c0ecd995cc (patch)
treec64c38bc9ff52bf9eeaecaa470e740b893ecfc59
parentaf132051ceeb0cb8f4e2eefb596c13fbeb760f7c (diff)
ipw2x00: move to kstrto* functions
There is better to use kstrto* instead of simple_strtoul. In this case it applies a bit stricter rules for input as well. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/ipw2x00/ipw2100.c32
1 files changed, 7 insertions, 25 deletions
diff --git a/drivers/net/wireless/ipw2x00/ipw2100.c b/drivers/net/wireless/ipw2x00/ipw2100.c
index cb066f62879d..15920aaa5dd6 100644
--- a/drivers/net/wireless/ipw2x00/ipw2100.c
+++ b/drivers/net/wireless/ipw2x00/ipw2100.c
@@ -4167,17 +4167,11 @@ static ssize_t show_debug_level(struct device_driver *d, char *buf)
4167static ssize_t store_debug_level(struct device_driver *d, 4167static ssize_t store_debug_level(struct device_driver *d,
4168 const char *buf, size_t count) 4168 const char *buf, size_t count)
4169{ 4169{
4170 char *p = (char *)buf;
4171 u32 val; 4170 u32 val;
4171 int ret;
4172 4172
4173 if (p[1] == 'x' || p[1] == 'X' || p[0] == 'x' || p[0] == 'X') { 4173 ret = kstrtou32(buf, 0, &val);
4174 p++; 4174 if (ret)
4175 if (p[0] == 'x' || p[0] == 'X')
4176 p++;
4177 val = simple_strtoul(p, &p, 16);
4178 } else
4179 val = simple_strtoul(p, &p, 10);
4180 if (p == buf)
4181 IPW_DEBUG_INFO(": %s is not in hex or decimal form.\n", buf); 4175 IPW_DEBUG_INFO(": %s is not in hex or decimal form.\n", buf);
4182 else 4176 else
4183 ipw2100_debug_level = val; 4177 ipw2100_debug_level = val;
@@ -4238,27 +4232,15 @@ static ssize_t store_scan_age(struct device *d, struct device_attribute *attr,
4238{ 4232{
4239 struct ipw2100_priv *priv = dev_get_drvdata(d); 4233 struct ipw2100_priv *priv = dev_get_drvdata(d);
4240 struct net_device *dev = priv->net_dev; 4234 struct net_device *dev = priv->net_dev;
4241 char buffer[] = "00000000";
4242 unsigned long len =
4243 (sizeof(buffer) - 1) > count ? count : sizeof(buffer) - 1;
4244 unsigned long val; 4235 unsigned long val;
4245 char *p = buffer; 4236 int ret;
4246 4237
4247 (void)dev; /* kill unused-var warning for debug-only code */ 4238 (void)dev; /* kill unused-var warning for debug-only code */
4248 4239
4249 IPW_DEBUG_INFO("enter\n"); 4240 IPW_DEBUG_INFO("enter\n");
4250 4241
4251 strncpy(buffer, buf, len); 4242 ret = kstrtoul(buf, 0, &val);
4252 buffer[len] = 0; 4243 if (ret) {
4253
4254 if (p[1] == 'x' || p[1] == 'X' || p[0] == 'x' || p[0] == 'X') {
4255 p++;
4256 if (p[0] == 'x' || p[0] == 'X')
4257 p++;
4258 val = simple_strtoul(p, &p, 16);
4259 } else
4260 val = simple_strtoul(p, &p, 10);
4261 if (p == buffer) {
4262 IPW_DEBUG_INFO("%s: user supplied invalid value.\n", dev->name); 4244 IPW_DEBUG_INFO("%s: user supplied invalid value.\n", dev->name);
4263 } else { 4245 } else {
4264 priv->ieee->scan_age = val; 4246 priv->ieee->scan_age = val;
@@ -4266,7 +4248,7 @@ static ssize_t store_scan_age(struct device *d, struct device_attribute *attr,
4266 } 4248 }
4267 4249
4268 IPW_DEBUG_INFO("exit\n"); 4250 IPW_DEBUG_INFO("exit\n");
4269 return len; 4251 return strnlen(buf, count);
4270} 4252}
4271 4253
4272static DEVICE_ATTR(scan_age, S_IWUSR | S_IRUGO, show_scan_age, store_scan_age); 4254static DEVICE_ATTR(scan_age, S_IWUSR | S_IRUGO, show_scan_age, store_scan_age);