summaryrefslogtreecommitdiff
path: root/lib/libc
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>2017-03-17 15:14:41 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>2017-03-17 15:14:41 +0000
commit0440ab0aec537fad084a0894be05052d3998d35e (patch)
treef81376b202fb4b224c81ba45f8c8fa912aef6538 /lib/libc
parent5924c129c38b3c9510c2bb92cdd192cdce7fb862 (diff)
recallocarray() the string buffer, to avoid leaving such contents
around in the address space. Don't bother doing so for the buffer which contains aslr'd pointers... ok millert
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/gen/fts.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/lib/libc/gen/fts.c b/lib/libc/gen/fts.c
index ad4fb0423f9..98b3a0a390d 100644
--- a/lib/libc/gen/fts.c
+++ b/lib/libc/gen/fts.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fts.c,v 1.57 2017/02/15 15:58:40 schwarze Exp $ */
+/* $OpenBSD: fts.c,v 1.58 2017/03/17 15:14:40 deraadt Exp $ */
/*-
* Copyright (c) 1990, 1993, 1994
@@ -881,14 +881,14 @@ fts_sort(FTS *sp, FTSENT *head, int nitems)
if (nitems > sp->fts_nitems) {
struct _ftsent **a;
- sp->fts_nitems = nitems + 40;
if ((a = reallocarray(sp->fts_array,
- sp->fts_nitems, sizeof(FTSENT *))) == NULL) {
+ nitems + 40, sizeof(FTSENT *))) == NULL) {
free(sp->fts_array);
sp->fts_array = NULL;
sp->fts_nitems = 0;
return (head);
}
+ sp->fts_nitems = nitems + 40;
sp->fts_array = a;
}
for (ap = sp->fts_array, p = head; p; p = p->fts_link)
@@ -963,13 +963,14 @@ fts_palloc(FTS *sp, size_t more)
errno = ENAMETOOLONG;
return (1);
}
- sp->fts_pathlen += more;
- p = realloc(sp->fts_path, sp->fts_pathlen);
+ p = recallocarray(sp->fts_path, sp->fts_pathlen,
+ sp->fts_pathlen + more, 1);
if (p == NULL) {
free(sp->fts_path);
sp->fts_path = NULL;
return (1);
}
+ sp->fts_pathlen += more;
sp->fts_path = p;
return (0);
}