diff options
-rw-r--r-- | mm/util.c | 11 |
1 files changed, 3 insertions, 8 deletions
@@ -225,15 +225,10 @@ char *strndup_user(const char __user *s, long n) | |||
225 | if (length > n) | 225 | if (length > n) |
226 | return ERR_PTR(-EINVAL); | 226 | return ERR_PTR(-EINVAL); |
227 | 227 | ||
228 | p = kmalloc(length, GFP_KERNEL); | 228 | p = memdup_user(s, length); |
229 | 229 | ||
230 | if (!p) | 230 | if (IS_ERR(p)) |
231 | return ERR_PTR(-ENOMEM); | 231 | return p; |
232 | |||
233 | if (copy_from_user(p, s, length)) { | ||
234 | kfree(p); | ||
235 | return ERR_PTR(-EFAULT); | ||
236 | } | ||
237 | 232 | ||
238 | p[length - 1] = '\0'; | 233 | p[length - 1] = '\0'; |
239 | 234 | ||