diff options
author | Jakub Wilk <jwilk@jwilk.net> | 2022-09-01 22:23:19 +0200 |
---|---|---|
committer | Andrew G. Morgan <morgan@kernel.org> | 2022-09-04 14:10:11 -0700 |
commit | fc804acc078ef03e2c5b3a233f118a537f260ccd (patch) | |
tree | 6ef90e50f15252a5f3cc13341ac9dc25d108da06 | |
parent | fc437fd8308b4ee4d8e3053d51471883946f9b04 (diff) | |
download | libcap-fc804acc078ef03e2c5b3a233f118a537f260ccd.tar.gz |
getpcaps: catch PID parsing errors.
Signed-off-by: Jakub Wilk <jwilk@jwilk.net>
Signed-off-by: Andrew G. Morgan <morgan@kernel.org>
-rw-r--r-- | progs/getpcaps.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/progs/getpcaps.c b/progs/getpcaps.c index 8fce0a3..1e914b2 100644 --- a/progs/getpcaps.c +++ b/progs/getpcaps.c @@ -39,7 +39,9 @@ int main(int argc, char **argv) } for ( ++argv; --argc > 0; ++argv ) { + long lpid; int pid; + char *endarg; cap_t cap_d; if (!strcmp(argv[0], "--help") || !strcmp(argv[0], "--usage") || @@ -62,7 +64,22 @@ int main(int argc, char **argv) continue; } - pid = atoi(argv[0]); + errno = 0; + lpid = strtol(argv[0], &endarg, 10); + if (*endarg != '\0') { + errno = EINVAL; + } + if (errno == 0) { + if (lpid < 0 || pid != (pid_t) pid) + errno = EOVERFLOW; + } + if (errno != 0) { + fprintf(stderr, "Cannot parse pid %s (%s)\n", + argv[0], strerror(errno)); + retval = 1; + continue; + } + pid = lpid; cap_d = cap_get_pid(pid); if (cap_d == NULL) { |