From b26fa4e87cfff937ba376ac5505c7968c80354ce Mon Sep 17 00:00:00 2001 From: Tomoki Shirasawa Date: Thu, 29 Jan 2015 16:14:31 +0900 Subject: [PATCH] wrong send signal to sender process when kill other process group (LTP kill10) refs #404 --- arch/x86/kernel/syscall.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/arch/x86/kernel/syscall.c b/arch/x86/kernel/syscall.c index 0293d675..4600d5f6 100644 --- a/arch/x86/kernel/syscall.c +++ b/arch/x86/kernel/syscall.c @@ -700,22 +700,23 @@ do_kill(int pid, int tid, int sig, siginfo_t *info, int ptracecont) v = get_cpu_local_var(i); irqstate = ihk_mc_spinlock_lock(&(v->runq_lock)); list_for_each_entry(p, &(v->runq), sched_list){ + int j; + if(p->ftn->pid <= 0) continue; + if(pgid != 1 && p->ftn->pgid != pgid) + continue; if(proc && p->ftn->pid == proc->ftn->pid){ sendme = 1; continue; } - if(pgid == 1 || p->ftn->pgid == pgid){ - int j; - for(j = 0; j < n; j++) - if(pids[j] == p->ftn->pid) - break; - if(j == n){ - pids[n] = p->ftn->pid; - n++; - } + for(j = 0; j < n; j++) + if(pids[j] == p->ftn->pid) + break; + if(j == n){ + pids[n] = p->ftn->pid; + n++; } } ihk_mc_spinlock_unlock(&(v->runq_lock), irqstate);