On Tue, Jun 28, 2016 at 11:58 AM, Oleg Nesterov <o...@redhat.com> wrote: > On 06/27, Oleg Nesterov wrote: >> >> On 06/27, Andy Lutomirski wrote: >> > >> > Want to send a patch? I could do it, but you understand this code >> > much better than I do. >> >> Well, I'll try to do this tomorrow unless you do it. > > I have cloned luto/linux.git to see if kthread_stop() can pin ->stack > somehow, but it seems this is not possible, finish_task_switch() does > free_thread_stack() unconditionally. > > Then how (say) proc_pid_stack() can work? If it hits the task which is > alreay dead we are (probably) fine, valid_stack_ptr() should fail iiuc. > > But what if we race with the last schedule() ? "addr = *stack" can read > the already vfree'ed memory, no? > > Looks like print_context_stack/etc need probe_kernel_address or I missed > something.
Yuck. I suppose I could add a reference count to protect the stack. Would that simplify the kthread code? It's too bad that all the kthread users use get_task_struct instead of, say get_kthread (which doesn't exist). --Andy > > Oleg. > -- Andy Lutomirski AMA Capital Management, LLC