• Mathieu Desnoyers's avatar
    [SPARC64]: Fix atomicity of TIF update in flush_thread() · c0a79b22
    Mathieu Desnoyers authored
    Fix atomicity of TIF update in flush_thread() for sparc64
    
    Fixes correctly the race by using *_ti_thread_flag.
    
    Race :
    
    parent process executing :
    sys_ptrace()
     (lock_kernel())
     (ptrace_get_task_struct(pid))
     arch_ptrace()
       ptrace_detach()
         ptrace_disable(child);
           clear_singlestep(child);
             clear_tsk_thread_flag(child, TIF_SINGLESTEP);
             (which clears the TIF_SINGLESTEP flag atomically from a different
              process)
     (put_task_struct(child))
     (unlock_kernel())
    
    And at the same time, in the child process :
    sys_execve()
     do_execve()
       search_binary_handler()
         load_elf_binary()
           flush_old_exec()
             flush_thread()
               doing a non-atomic thread flag update
    Signed-off-by: default avatarMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    c0a79b22
process.c 22.5 KB