• Bodo Stroesser's avatar
    [PATCH] uml: Fix process exit race · 0f7e663d
    Bodo Stroesser authored
    tt-mode closes switch_pipes in exit_thread_tt and kills processes in
    switch_to_tt, if the exit_state is EXIT_DEAD or EXIT_ZOMBIE.
    
    In very rare cases the exiting process can be scheduled out after having set
    exit_state and closed switch_pipes (from release_task it calls proc_pid_flush,
    which might sleep).  If this process is to be restarted, UML failes in
    switch_to_tt with:
    
       write of switch_pipe failed, err = 9
    
    We fix this by closing switch_pipes not in exit_thread_tt, but later in
    release_thread_tt.  Additionally, we set switch_pipe[0] = 0 after closing.
    switch_to_tt must not kill "from" process depending on its exit_state, but
    must kill it after release_thread was processed only, so it examines
    switch_pipe[0] for its decision.
    Signed-off-by: default avatarBodo Stroesser <bstroesser@fujitsu-siemens.com>
    Signed-off-by: default avatarJeff Dike <jdike@addtoit.com>
    Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    0f7e663d
process_kern.c 11.7 KB