On 02 Aug 2014, at 11:19, Oleg Nesterov <o...@redhat.com> wrote:
> On 07/31, Aleksei Besogonov wrote:
>> 
>> On 31 Jul 2014, at 00:43, David Rientjes <rient...@google.com> wrote:
>> 
>>> The while_each_thread() in vm_is_stack() looks suspicious since the task
>>> isn't current and rcu won't protect the iteration, and we also don't hold
>>> sighand lock or a readlock on tasklist_lock.
>>> I think Oleg will know how to proceed, cc'd.
>> I’m attaching a minimal test case that can reproduce the issue. Works in 
>> 100% cases on any system I’ve tried.
> Thanks. I think David is right and we need the simple patch below.
> This reminds me I should kill while_each_thread :/
> Any chance you can test it? If not, I will do this later and send
> the patch if it helps.
Thanks, it works on the rc7 kernel.

I can make a backported version for earlier kernels if nobody else is 
interested.

> 
> Oleg.
> 
> --- x/mm/util.c
> +++ x/mm/util.c
> @@ -277,17 +277,14 @@ pid_t vm_is_stack(struct task_struct *ta
> 
>       if (in_group) {
>               struct task_struct *t;
> -             rcu_read_lock();
> -             if (!pid_alive(task))
> -                     goto done;
> 
> -             t = task;
> -             do {
> +             rcu_read_lock();
> +             for_each_thread(task, t) {
>                       if (vm_is_stack_for_task(t, vma)) {
>                               ret = t->pid;
>                               goto done;
>                       }
> -             } while_each_thread(task, t);
> +             }
> done:
>               rcu_read_unlock();
>       }
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to