diff options
| -rw-r--r-- | net/ieee80211/ieee80211_module.c | 16 | 
1 files changed, 11 insertions, 5 deletions
| diff --git a/net/ieee80211/ieee80211_module.c b/net/ieee80211/ieee80211_module.c index e4ca0daaaeea..90bc50b97ea7 100644 --- a/net/ieee80211/ieee80211_module.c +++ b/net/ieee80211/ieee80211_module.c | |||
| @@ -194,17 +194,23 @@ static int show_debug_level(char *page, char **start, off_t offset, | |||
| 194 | return snprintf(page, count, "0x%08X\n", ieee80211_debug_level); | 194 | return snprintf(page, count, "0x%08X\n", ieee80211_debug_level); | 
| 195 | } | 195 | } | 
| 196 | 196 | ||
| 197 | static int store_debug_level(struct file *file, const char *buffer, | 197 | static int store_debug_level(struct file *file, const char __user *buffer, | 
| 198 | unsigned long count, void *data) | 198 | unsigned long count, void *data) | 
| 199 | { | 199 | { | 
| 200 | char buf[] = "0x00000000"; | 200 | char buf[] = "0x00000000"; | 
| 201 | unsigned long len = min(sizeof(buf) - 1, (u32)count); | ||
| 202 | char *p = (char *)buf; | 201 | char *p = (char *)buf; | 
| 203 | unsigned long val; | 202 | unsigned long val; | 
| 204 | 203 | ||
| 205 | if (copy_from_user(buf, buffer, len)) | 204 | if (count > sizeof(buf) - 1) | 
| 205 | count = sizeof(buf) - 1; | ||
| 206 | |||
| 207 | if (copy_from_user(buf, buffer, count)) | ||
| 206 | return count; | 208 | return count; | 
| 207 | buf[len] = 0; | 209 | buf[count] = 0; | 
| 210 | /* | ||
| 211 | * what a FPOS... What, sscanf(buf, "%i", &val) would be too | ||
| 212 | * scary? | ||
| 213 | */ | ||
| 208 | if (p[1] == 'x' || p[1] == 'X' || p[0] == 'x' || p[0] == 'X') { | 214 | if (p[1] == 'x' || p[1] == 'X' || p[0] == 'x' || p[0] == 'X') { | 
| 209 | p++; | 215 | p++; | 
| 210 | if (p[0] == 'x' || p[0] == 'X') | 216 | if (p[0] == 'x' || p[0] == 'X') | 
| @@ -218,7 +224,7 @@ static int store_debug_level(struct file *file, const char *buffer, | |||
| 218 | else | 224 | else | 
| 219 | ieee80211_debug_level = val; | 225 | ieee80211_debug_level = val; | 
| 220 | 226 | ||
| 221 | return strnlen(buf, count); | 227 | return strlen(buf); | 
| 222 | } | 228 | } | 
| 223 | 229 | ||
| 224 | static int __init ieee80211_init(void) | 230 | static int __init ieee80211_init(void) | 
