diff options
author | Alexey Fomenko | 2011-12-22 11:38:57 +0100 |
---|---|---|
committer | Denys Vlasenko | 2011-12-22 11:38:57 +0100 |
commit | 6a93212b54327c77383d88efd581475105f3b72a (patch) | |
tree | 5e5579dfc218ee79e8aec1c66410007b4134c88a /procps/kill.c | |
parent | 83f103b30e41ab038e45661df97625f655abe491 (diff) | |
download | busybox-6a93212b54327c77383d88efd581475105f3b72a.zip busybox-6a93212b54327c77383d88efd581475105f3b72a.tar.gz |
kill: fix segfault in arguments parsing
Signed-off-by: Alexey Fomenko <ext-alexey.fomenko@nokia.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'procps/kill.c')
-rw-r--r-- | procps/kill.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/procps/kill.c b/procps/kill.c index 224e5ad..b267a7a 100644 --- a/procps/kill.c +++ b/procps/kill.c @@ -165,13 +165,15 @@ int kill_main(int argc, char **argv) /* Stop all processes */ kill(-1, SIGSTOP); /* Signal all processes except those in our session */ - while ((p = procps_scan(p, PSSCAN_PID|PSSCAN_SID))) { + while ((p = procps_scan(p, PSSCAN_PID|PSSCAN_SID)) != NULL) { int i; if (p->sid == (unsigned)sid || p->pid == (unsigned)pid - || p->pid == 1) + || p->pid == 1 + ) { continue; + } /* All remaining args must be -o PID options. * Check p->pid against them. */ @@ -255,9 +257,10 @@ int kill_main(int argc, char **argv) pid = bb_strtoi(arg, &end, 10); if (errno && (errno != EINVAL || *end != ' ')) { bb_error_msg("invalid number '%s'", arg); - *end = '\0'; errors++; - } else if (kill(pid, signo) != 0) { + break; + } + if (kill(pid, signo) != 0) { bb_perror_msg("can't kill pid %d", (int)pid); errors++; } |