signal: Simplify and fix kdb_send_sig
- Rename from kdb_send_sig_info to kdb_send_sig As there is no meaningful siginfo sent - Use SEND_SIG_PRIV instead of generating a siginfo for a kdb signal. The generated siginfo had a bogus rationale and was not correct in the face of pid namespaces. SEND_SIG_PRIV is simpler and actually correct. - As the code grabs siglock just send the signal with siglock held instead of dropping siglock and attempting to grab it again. - Move the sig_valid test into kdb_kill where it can generate a good error message. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
This commit is contained in:
@@ -2441,7 +2441,6 @@ static int kdb_kill(int argc, const char **argv)
|
||||
long sig, pid;
|
||||
char *endp;
|
||||
struct task_struct *p;
|
||||
struct siginfo info;
|
||||
|
||||
if (argc != 2)
|
||||
return KDB_ARGCOUNT;
|
||||
@@ -2449,7 +2448,7 @@ static int kdb_kill(int argc, const char **argv)
|
||||
sig = simple_strtol(argv[1], &endp, 0);
|
||||
if (*endp)
|
||||
return KDB_BADINT;
|
||||
if (sig >= 0) {
|
||||
if ((sig >= 0) || !valid_signal(-sig)) {
|
||||
kdb_printf("Invalid signal parameter.<-signal>\n");
|
||||
return 0;
|
||||
}
|
||||
@@ -2470,12 +2469,7 @@ static int kdb_kill(int argc, const char **argv)
|
||||
return 0;
|
||||
}
|
||||
p = p->group_leader;
|
||||
info.si_signo = sig;
|
||||
info.si_errno = 0;
|
||||
info.si_code = SI_USER;
|
||||
info.si_pid = pid; /* same capabilities as process being signalled */
|
||||
info.si_uid = 0; /* kdb has root authority */
|
||||
kdb_send_sig_info(p, &info);
|
||||
kdb_send_sig(p, sig);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user