• Eric W. Biederman's avatar
    kthread: Don't allocate kthread_struct for init and umh · d2408e5a
    Eric W. Biederman authored
    commit 343f4c49 upstream.
    
    If kthread_is_per_cpu runs concurrently with free_kthread_struct the
    kthread_struct that was just freed may be read from.
    
    This bug was introduced by commit 40966e31 ("kthread: Ensure
    struct kthread is present for all kthreads").  When kthread_struct
    started to be allocated for all tasks that have PF_KTHREAD set.  This
    in turn required the kthread_struct to be freed in kernel_execve and
    violated the assumption that kthread_struct will have the same
    lifetime as the task.
    
    Looking a bit deeper this only applies to callers of kernel_execve
    which is just the init process and the user mode helper processes.
    These processes really don't want to be kernel threads but are for
    historical reasons.  Mostly that copy_thread does not know how to take
    a kernel mode function to the process with for processes without
    PF_KTHREAD or PF_IO_WORKER set.
    
    Solve this by not allocating kthread_struct for the ini...
    d2408e5a
main.c 39.6 KB