summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael McConville <mmcco@mykolab.com>2016-03-05 23:38:12 -0500
committerMichael McConville <mmcco@mykolab.com>2016-03-05 23:38:12 -0500
commit4b780a3499edc795b8edddac2e3b91792d7721d1 (patch)
tree1953b0753708ad6328126479290710294366a28b
parentb08cb7352e8256d7b2f4ea282a13939e91948c58 (diff)
A few more OpenBSD fixes
Namely: o use malloc where an xCalloc slipped in o safeguard against an empty arg list - I don't think it's possible, but it would be potentially exploitable o we need to initialize the arg string to an empty string because we no longer use strlcpy(3) o annotate a tricky use of strlcpy(3)'s truncation
-rw-r--r--openbsd/OpenBSDProcessList.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/openbsd/OpenBSDProcessList.c b/openbsd/OpenBSDProcessList.c
index b1060367..548a1eea 100644
--- a/openbsd/OpenBSDProcessList.c
+++ b/openbsd/OpenBSDProcessList.c
@@ -161,7 +161,7 @@ char *OpenBSDProcessList_readProcessName(kvm_t* kd, struct kinfo_proc* kproc, in
* (argv[0]) if we fail to construct the full command.
*/
arg = kvm_getargv(kd, kproc, 500);
- if (arg == NULL) {
+ if (arg == NULL || *arg == NULL) {
*basenameEnd = strlen(kproc->p_comm);
return xStrdup(kproc->p_comm);
}
@@ -169,18 +169,23 @@ char *OpenBSDProcessList_readProcessName(kvm_t* kd, struct kinfo_proc* kproc, in
len += strlen(arg[i]) + 1; /* room for arg and trailing space or NUL */
}
/* don't use xMalloc here - we want to handle huge argv's gracefully */
- if ((s = xCalloc(len, 1)) == NULL) {
+ if ((s = malloc(len)) == NULL) {
*basenameEnd = strlen(kproc->p_comm);
return xStrdup(kproc->p_comm);
}
+
+ *s = '\0';
+
for (i = 0; arg[i] != NULL; i++) {
n = strlcat(s, arg[i], len);
if (i == 0) {
/* TODO: rename all basenameEnd to basenameLen, make size_t */
*basenameEnd = MINIMUM(n, len-1);
}
+ /* the trailing space should get truncated anyway */
strlcat(s, " ", len);
}
+
return s;
}

© 2014-2024 Faster IT GmbH | imprint | privacy policy