more signal locking bugs?

Martin J. Bligh
2003-02-16T19:09:25Z

task_lock nests *inside* tasklist_lock but ... :

__do_SAK:

task_lock
...
send_sig (SIGKILL, ...)
send_sig_info (SIGKILL, ...)
if (T(sig, SIG_KERNEL_BROADCAST_MASK)))
read_lock(&tasklist_lock);
...
read_unlock(&tasklist_lock);
...
task_unlock

#define SIG_KERNEL_BROADCAST_MASK (\
M(SIGHUP) | M(SIGINT) | M(SIGQUIT) | M(SIGILL) | \
M(SIGTRAP) | M(SIGABRT) | M(SIGBUS) | M(SIGFPE) | \
M(SIGKILL) | M(SIGUSR1) | M(SIGSEGV) | M(SIGUSR2) | \
M(SIGPIPE) | M(SIGALRM) | M(SIGTERM) | M(SIGXCPU) | \
M(SIGXFSZ) | M(SIGVTALRM) | M(SIGPROF) | M(SIGPOLL) | \
M(SIGSYS) | M_SIGSTKFLT | M(SIGPWR) | M(SIGCONT) | \
M(SIGSTOP) | M(SIGTSTP) | M(SIGTTIN) | M(SIGTTOU) | \
M_SIGEMT )