diff options
Diffstat (limited to 'fs/proc/task_mmu.c')
-rw-r--r-- | fs/proc/task_mmu.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index db15935fa757..30a6a72d05b2 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c | |||
@@ -536,15 +536,17 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, | |||
536 | char buffer[PROC_NUMBUF]; | 536 | char buffer[PROC_NUMBUF]; |
537 | struct mm_struct *mm; | 537 | struct mm_struct *mm; |
538 | struct vm_area_struct *vma; | 538 | struct vm_area_struct *vma; |
539 | long type; | 539 | int type; |
540 | int rv; | ||
540 | 541 | ||
541 | memset(buffer, 0, sizeof(buffer)); | 542 | memset(buffer, 0, sizeof(buffer)); |
542 | if (count > sizeof(buffer) - 1) | 543 | if (count > sizeof(buffer) - 1) |
543 | count = sizeof(buffer) - 1; | 544 | count = sizeof(buffer) - 1; |
544 | if (copy_from_user(buffer, buf, count)) | 545 | if (copy_from_user(buffer, buf, count)) |
545 | return -EFAULT; | 546 | return -EFAULT; |
546 | if (strict_strtol(strstrip(buffer), 10, &type)) | 547 | rv = kstrtoint(strstrip(buffer), 10, &type); |
547 | return -EINVAL; | 548 | if (rv < 0) |
549 | return rv; | ||
548 | if (type < CLEAR_REFS_ALL || type > CLEAR_REFS_MAPPED) | 550 | if (type < CLEAR_REFS_ALL || type > CLEAR_REFS_MAPPED) |
549 | return -EINVAL; | 551 | return -EINVAL; |
550 | task = get_proc_task(file->f_path.dentry->d_inode); | 552 | task = get_proc_task(file->f_path.dentry->d_inode); |