|
@@ -3124,11 +3124,16 @@ static int proc_pid_fill_cache(struct file *filp, void *dirent, filldir_t filldi
|
|
|
/* for the /proc/ directory itself, after non-process stuff has been done */
|
|
|
int proc_pid_readdir(struct file * filp, void * dirent, filldir_t filldir)
|
|
|
{
|
|
|
- unsigned int nr = filp->f_pos - FIRST_PROCESS_ENTRY;
|
|
|
- struct task_struct *reaper = get_proc_task(filp->f_path.dentry->d_inode);
|
|
|
+ unsigned int nr;
|
|
|
+ struct task_struct *reaper;
|
|
|
struct tgid_iter iter;
|
|
|
struct pid_namespace *ns;
|
|
|
|
|
|
+ if (filp->f_pos >= PID_MAX_LIMIT + TGID_OFFSET)
|
|
|
+ goto out_no_task;
|
|
|
+ nr = filp->f_pos - FIRST_PROCESS_ENTRY;
|
|
|
+
|
|
|
+ reaper = get_proc_task(filp->f_path.dentry->d_inode);
|
|
|
if (!reaper)
|
|
|
goto out_no_task;
|
|
|
|