diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/kstrtox.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/kstrtox.c b/lib/kstrtox.c index a235f3cc471c..2dbae88090ac 100644 --- a/lib/kstrtox.c +++ b/lib/kstrtox.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/math64.h> | 17 | #include <linux/math64.h> |
18 | #include <linux/module.h> | 18 | #include <linux/module.h> |
19 | #include <linux/types.h> | 19 | #include <linux/types.h> |
20 | #include <asm/uaccess.h> | ||
20 | 21 | ||
21 | static inline char _tolower(const char c) | 22 | static inline char _tolower(const char c) |
22 | { | 23 | { |
@@ -222,3 +223,28 @@ int kstrtos8(const char *s, unsigned int base, s8 *res) | |||
222 | return 0; | 223 | return 0; |
223 | } | 224 | } |
224 | EXPORT_SYMBOL(kstrtos8); | 225 | EXPORT_SYMBOL(kstrtos8); |
226 | |||
227 | #define kstrto_from_user(f, g, type) \ | ||
228 | int f(const char __user *s, size_t count, unsigned int base, type *res) \ | ||
229 | { \ | ||
230 | /* sign, base 2 representation, newline, terminator */ \ | ||
231 | char buf[1 + sizeof(type) * 8 + 1 + 1]; \ | ||
232 | \ | ||
233 | count = min(count, sizeof(buf) - 1); \ | ||
234 | if (copy_from_user(buf, s, count)) \ | ||
235 | return -EFAULT; \ | ||
236 | buf[count] = '\0'; \ | ||
237 | return g(buf, base, res); \ | ||
238 | } \ | ||
239 | EXPORT_SYMBOL(f) | ||
240 | |||
241 | kstrto_from_user(kstrtoull_from_user, kstrtoull, unsigned long long); | ||
242 | kstrto_from_user(kstrtoll_from_user, kstrtoll, long long); | ||
243 | kstrto_from_user(kstrtoul_from_user, kstrtoul, unsigned long); | ||
244 | kstrto_from_user(kstrtol_from_user, kstrtol, long); | ||
245 | kstrto_from_user(kstrtouint_from_user, kstrtouint, unsigned int); | ||
246 | kstrto_from_user(kstrtoint_from_user, kstrtoint, int); | ||
247 | kstrto_from_user(kstrtou16_from_user, kstrtou16, u16); | ||
248 | kstrto_from_user(kstrtos16_from_user, kstrtos16, s16); | ||
249 | kstrto_from_user(kstrtou8_from_user, kstrtou8, u8); | ||
250 | kstrto_from_user(kstrtos8_from_user, kstrtos8, s8); | ||