proc: do proper range check on readdir offset

Rather than pass in some random truncated offset to the pid-related
functions, check that the offset is in range up-front.

This is just cleanup, the previous commit fixed the real problem.

Cc: stable@kernel.org
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

+7 -2
+7 -2
fs/proc/base.c
··· 3124 3124 /* for the /proc/ directory itself, after non-process stuff has been done */ 3125 3125 int proc_pid_readdir(struct file * filp, void * dirent, filldir_t filldir) 3126 3126 { 3127 - unsigned int nr = filp->f_pos - FIRST_PROCESS_ENTRY; 3128 - struct task_struct *reaper = get_proc_task(filp->f_path.dentry->d_inode); 3127 + unsigned int nr; 3128 + struct task_struct *reaper; 3129 3129 struct tgid_iter iter; 3130 3130 struct pid_namespace *ns; 3131 3131 3132 + if (filp->f_pos >= PID_MAX_LIMIT + TGID_OFFSET) 3133 + goto out_no_task; 3134 + nr = filp->f_pos - FIRST_PROCESS_ENTRY; 3135 + 3136 + reaper = get_proc_task(filp->f_path.dentry->d_inode); 3132 3137 if (!reaper) 3133 3138 goto out_no_task; 3134 3139