2002-10-07 20:47:47

by Michal Jaegermann

[permalink] [raw]
Subject: Is this racy?

In fs/proc/array.c (2.4.20-pre9, 2.4.19 and likely many other
versions) in function 'proc_pid_stat()' there is a code like that:

......
read_lock(&tasklist_lock);
ppid = task->pid ? task->p_opptr->pid : 0;
read_unlock(&tasklist_lock);
res = sprintf(buffer,"<long format string>",
task->pid,
......
ppid,
......

So assignment to ppid is locked but other reads from fiels of 'task'
structure are not guarded that way. Is this ok or if not we do not
particularly care? Function 'task_state()' in the same file seems
to be more careful about this.

Michal


2002-10-07 21:31:19

by Daniel Jacobowitz

[permalink] [raw]
Subject: Re: Is this racy?

On Mon, Oct 07, 2002 at 02:51:52PM -0600, Michal Jaegermann wrote:
> In fs/proc/array.c (2.4.20-pre9, 2.4.19 and likely many other
> versions) in function 'proc_pid_stat()' there is a code like that:
>
> ......
> read_lock(&tasklist_lock);
> ppid = task->pid ? task->p_opptr->pid : 0;
> read_unlock(&tasklist_lock);
> res = sprintf(buffer,"<long format string>",
> task->pid,
> ......
> ppid,
> ......
>
> So assignment to ppid is locked but other reads from fiels of 'task'
> structure are not guarded that way. Is this ok or if not we do not
> particularly care? Function 'task_state()' in the same file seems
> to be more careful about this.

I think the lock is just so that p_opptr->pid doesn't change while
we're looking at it.

--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer