diff options
author | Andy Shevchenko <andriy.shevchenko@linux.intel.com> | 2013-04-10 07:01:18 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-04-10 14:10:34 -0400 |
commit | fe29f54cd574eab7b521445419f355c0ecd995cc (patch) | |
tree | c64c38bc9ff52bf9eeaecaa470e740b893ecfc59 | |
parent | af132051ceeb0cb8f4e2eefb596c13fbeb760f7c (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.c | 32 |
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) | |||
4167 | static ssize_t store_debug_level(struct device_driver *d, | 4167 | static 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 | ||
4272 | static DEVICE_ATTR(scan_age, S_IWUSR | S_IRUGO, show_scan_age, store_scan_age); | 4254 | static DEVICE_ATTR(scan_age, S_IWUSR | S_IRUGO, show_scan_age, store_scan_age); |