summaryrefslogtreecommitdiff
path: root/procps/kill.c
diff options
context:
space:
mode:
authorAlexey Fomenko2011-12-22 11:38:57 +0100
committerDenys Vlasenko2011-12-22 11:38:57 +0100
commit6a93212b54327c77383d88efd581475105f3b72a (patch)
tree5e5579dfc218ee79e8aec1c66410007b4134c88a /procps/kill.c
parent83f103b30e41ab038e45661df97625f655abe491 (diff)
downloadbusybox-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.c11
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++;
}