aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Wilk <jwilk@jwilk.net>2022-09-01 22:23:19 +0200
committerAndrew G. Morgan <morgan@kernel.org>2022-09-04 14:10:11 -0700
commitfc804acc078ef03e2c5b3a233f118a537f260ccd (patch)
tree6ef90e50f15252a5f3cc13341ac9dc25d108da06
parentfc437fd8308b4ee4d8e3053d51471883946f9b04 (diff)
downloadlibcap-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.c19
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) {