Messages in this thread | | | Date | Tue, 20 Mar 2012 14:03:16 -0700 | From | Andrew Morton <> | Subject | Re: [PATCH linux-next] mm: fix rcu-lock/unlock balance in vm_is_stack() |
| |
On Wed, 21 Mar 2012 00:54:55 +0400 Konstantin Khlebnikov <khlebnikov@openvz.org> wrote:
> Fix bug introduced in "procfs: mark thread stack correctly in proc/<pid>/maps" > (patch in mm/linux-next) > > Signed-off-by: Konstantin Khlebnikov <khlebnikov@openvz.org> > --- > mm/memory.c | 5 ++--- > 1 files changed, 2 insertions(+), 3 deletions(-) > > diff --git a/mm/memory.c b/mm/memory.c > index ee85fc4..cc08b86 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -3932,13 +3932,12 @@ pid_t vm_is_stack(struct task_struct *task, > while_each_thread(task, t) { > if (vm_is_stack_for_task(t, vma)) { > ret = t->pid; > - goto done; > + break; > } > } > + rcu_read_unlock(); > } > > -done: > - rcu_read_unlock(); > return ret; > } >
Appears to have been fixed in v3:
pid_t vm_is_stack(struct task_struct *task, struct vm_area_struct *vma, int in_group) { pid_t ret = 0;
if (vm_is_stack_for_task(task, vma)) return task->pid;
if (in_group) { struct task_struct *t; rcu_read_lock(); if (!pid_alive(task)) goto done;
t = task; do { if (vm_is_stack_for_task(t, vma)) { ret = t->pid; goto done; } } while_each_thread(task, t); done: rcu_read_unlock(); }
return ret; }
I'm working on getting a -next update sent to Stephen today.
| |