diff options
Diffstat (limited to 'kernel/trace/blktrace.c')
-rw-r--r-- | kernel/trace/blktrace.c | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c index a990824c8604..2aeb6ffc0a1e 100644 --- a/kernel/trace/blktrace.c +++ b/kernel/trace/blktrace.c | |||
@@ -349,16 +349,10 @@ static ssize_t blk_msg_write(struct file *filp, const char __user *buffer, | |||
349 | if (count >= BLK_TN_MAX_MSG) | 349 | if (count >= BLK_TN_MAX_MSG) |
350 | return -EINVAL; | 350 | return -EINVAL; |
351 | 351 | ||
352 | msg = kmalloc(count + 1, GFP_KERNEL); | 352 | msg = memdup_user_nul(buffer, count); |
353 | if (msg == NULL) | 353 | if (IS_ERR(msg)) |
354 | return -ENOMEM; | 354 | return PTR_ERR(msg); |
355 | |||
356 | if (copy_from_user(msg, buffer, count)) { | ||
357 | kfree(msg); | ||
358 | return -EFAULT; | ||
359 | } | ||
360 | 355 | ||
361 | msg[count] = '\0'; | ||
362 | bt = filp->private_data; | 356 | bt = filp->private_data; |
363 | __trace_note_message(bt, "%s", msg); | 357 | __trace_note_message(bt, "%s", msg); |
364 | kfree(msg); | 358 | kfree(msg); |