• Linus Torvalds's avatar
    Merge tag 'kthread-cleanups-for-v5.19' of... · 1ec6574a
    Linus Torvalds authored
    Merge tag 'kthread-cleanups-for-v5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace
    
    Pull kthread updates from Eric Biederman:
     "This updates init and user mode helper tasks to be ordinary user mode
      tasks.
    
      Commit 40966e31 ("kthread: Ensure struct kthread is present for
      all kthreads") caused init and the user mode helper threads that call
      kernel_execve to have struct kthread allocated for them. This struct
      kthread going away during execve in turned made a use after free of
      struct kthread possible.
    
      Here, commit 343f4c49 ("kthread: Don't allocate kthread_struct for
      init and umh") is enough to fix the use after free and is simple
      enough to be backportable.
    
      The rest of the changes pass struct kernel_clone_args to clean things
      up and cause the code to make sense.
    
      In making init and the user mode helpers tasks purely user mode tasks
      I ran into two complications. The function task_tick_numa was
      detecting tasks without an mm by testing for the presence of
      PF_KTHREAD. The initramfs code in populate_initrd_image was using
      flush_delayed_fput to ensuere the closing of all it's file descriptors
      was complete, and flush_delayed_fput does not work in a userspace
      thread.
    
      I have looked and looked and more complications and in my code review
      I have not found any, and neither has anyone else with the code
      sitting in linux-next"
    
    * tag 'kthread-cleanups-for-v5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace:
      sched: Update task_tick_numa to ignore tasks without an mm
      fork: Stop allowing kthreads to call execve
      fork: Explicitly set PF_KTHREAD
      init: Deal with the init process being a user mode process
      fork: Generalize PF_IO_WORKER handling
      fork: Explicity test for idle tasks in copy_thread
      fork: Pass struct kernel_clone_args into copy_thread
      kthread: Don't allocate kthread_struct for init and umh
    1ec6574a
process.c 7.88 KB