diff options
Diffstat (limited to 'lib/dynamic_debug.c')
-rw-r--r-- | lib/dynamic_debug.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index e3952e9c8ec0..fe42b6ec3f0c 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c | |||
@@ -657,14 +657,9 @@ static ssize_t ddebug_proc_write(struct file *file, const char __user *ubuf, | |||
657 | pr_warn("expected <%d bytes into control\n", USER_BUF_PAGE); | 657 | pr_warn("expected <%d bytes into control\n", USER_BUF_PAGE); |
658 | return -E2BIG; | 658 | return -E2BIG; |
659 | } | 659 | } |
660 | tmpbuf = kmalloc(len + 1, GFP_KERNEL); | 660 | tmpbuf = memdup_user_nul(ubuf, len); |
661 | if (!tmpbuf) | 661 | if (IS_ERR(tmpbuf)) |
662 | return -ENOMEM; | 662 | return PTR_ERR(tmpbuf); |
663 | if (copy_from_user(tmpbuf, ubuf, len)) { | ||
664 | kfree(tmpbuf); | ||
665 | return -EFAULT; | ||
666 | } | ||
667 | tmpbuf[len] = '\0'; | ||
668 | vpr_info("read %d bytes from userspace\n", (int)len); | 663 | vpr_info("read %d bytes from userspace\n", (int)len); |
669 | 664 | ||
670 | ret = ddebug_exec_queries(tmpbuf, NULL); | 665 | ret = ddebug_exec_queries(tmpbuf, NULL); |