aboutsummaryrefslogtreecommitdiff
path: root/libexec
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2012-03-22 14:20:51 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2012-03-22 14:20:51 +0000
commit758ffbfa3bd27cb793750d90c47ed8a0dc537823 (patch)
tree575831251bf75cadb2609a8e274cbb1bac859020 /libexec
parentff6cd33319d071c728d69b9fcd8710bf45d7dd52 (diff)
downloadsrc-758ffbfa3bd27cb793750d90c47ed8a0dc537823.tar.gz
src-758ffbfa3bd27cb793750d90c47ed8a0dc537823.zip
Use xmalloc() instead of malloc() in the places where malloc() calls
are assumed to not fail. Make the xcalloc() calling conventions follow the calloc(3) calling conventions and replace unchecked calls to calloc() with calls to xcalloc(). Remove redundand declarations from xmalloc.c, which are already present in rtld.h. Reviewed by: kan Discussed with: bde MFC after: 2 weeks
Notes
Notes: svn path=/head/; revision=233307
Diffstat (limited to 'libexec')
-rw-r--r--libexec/rtld-elf/ia64/reloc.c6
-rw-r--r--libexec/rtld-elf/powerpc64/reloc.c2
-rw-r--r--libexec/rtld-elf/rtld.c12
-rw-r--r--libexec/rtld-elf/rtld.h4
-rw-r--r--libexec/rtld-elf/xmalloc.c15
5 files changed, 20 insertions, 19 deletions
diff --git a/libexec/rtld-elf/ia64/reloc.c b/libexec/rtld-elf/ia64/reloc.c
index 1afcecfa120b..01e20b8f9a71 100644
--- a/libexec/rtld-elf/ia64/reloc.c
+++ b/libexec/rtld-elf/ia64/reloc.c
@@ -87,7 +87,7 @@ alloc_fptr(Elf_Addr target, Elf_Addr gp)
struct fptr* fptr;
if (next_fptr == last_fptr) {
- current_chunk = malloc(sizeof(struct fptr_chunk));
+ current_chunk = xmalloc(sizeof(struct fptr_chunk));
next_fptr = &current_chunk->fptrs[0];
last_fptr = &current_chunk->fptrs[FPTR_CHUNK_SIZE];
}
@@ -116,9 +116,7 @@ alloc_fptrs(Obj_Entry *obj, bool mapped)
if (fptrs == MAP_FAILED)
fptrs = NULL;
} else {
- fptrs = malloc(fbytes);
- if (fptrs != NULL)
- memset(fptrs, 0, fbytes);
+ fptrs = xcalloc(1, fbytes);
}
/*
diff --git a/libexec/rtld-elf/powerpc64/reloc.c b/libexec/rtld-elf/powerpc64/reloc.c
index 46e2c629e08b..92df83d11834 100644
--- a/libexec/rtld-elf/powerpc64/reloc.c
+++ b/libexec/rtld-elf/powerpc64/reloc.c
@@ -338,7 +338,7 @@ reloc_plt_object(Obj_Entry *obj, const Elf_Rela *rela)
reloff = rela - obj->pltrela;
if (obj->priv == NULL)
- obj->priv = malloc(obj->pltrelasize);
+ obj->priv = xmalloc(obj->pltrelasize);
glink = obj->priv + reloff*sizeof(Elf_Addr)*2;
dbg(" reloc_plt_object: where=%p,reloff=%lx,glink=%p", (void *)where, reloff, glink);
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index f2ad5542e50b..4dac1c12554e 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -3733,7 +3733,7 @@ tls_get_addr_slow(Elf_Addr **dtvp, int index, size_t offset)
/* Check dtv generation in case new modules have arrived */
if (dtv[0] != tls_dtv_generation) {
wlock_acquire(rtld_bind_lock, &lockstate);
- newdtv = calloc(1, (tls_max_index + 2) * sizeof(Elf_Addr));
+ newdtv = xcalloc(tls_max_index + 2, sizeof(Elf_Addr));
to_copy = dtv[1];
if (to_copy > tls_max_index)
to_copy = tls_max_index;
@@ -3788,7 +3788,7 @@ allocate_tls(Obj_Entry *objs, void *oldtcb, size_t tcbsize, size_t tcbalign)
return (oldtcb);
assert(tcbsize >= TLS_TCB_SIZE);
- tcb = calloc(1, tls_static_space - TLS_TCB_SIZE + tcbsize);
+ tcb = xcalloc(1, tls_static_space - TLS_TCB_SIZE + tcbsize);
tls = (Elf_Addr **)(tcb + tcbsize - TLS_TCB_SIZE);
if (oldtcb != NULL) {
@@ -3804,7 +3804,7 @@ allocate_tls(Obj_Entry *objs, void *oldtcb, size_t tcbsize, size_t tcbalign)
}
}
} else {
- dtv = calloc(tls_max_index + 2, sizeof(Elf_Addr));
+ dtv = xcalloc(tls_max_index + 2, sizeof(Elf_Addr));
tls[0] = dtv;
dtv[0] = tls_dtv_generation;
dtv[1] = tls_max_index;
@@ -3868,8 +3868,8 @@ allocate_tls(Obj_Entry *objs, void *oldtls, size_t tcbsize, size_t tcbalign)
size = round(tls_static_space, tcbalign);
assert(tcbsize >= 2*sizeof(Elf_Addr));
- tls = calloc(1, size + tcbsize);
- dtv = calloc(1, (tls_max_index + 2) * sizeof(Elf_Addr));
+ tls = xcalloc(1, size + tcbsize);
+ dtv = xcalloc(tls_max_index + 2, sizeof(Elf_Addr));
segbase = (Elf_Addr)(tls + size);
((Elf_Addr*)segbase)[0] = segbase;
@@ -4209,7 +4209,7 @@ rtld_verify_object_versions(Obj_Entry *obj)
* way.
*/
obj->vernum = maxvernum + 1;
- obj->vertab = calloc(obj->vernum, sizeof(Ver_Entry));
+ obj->vertab = xcalloc(obj->vernum, sizeof(Ver_Entry));
vd = obj->verdef;
while (vd != NULL) {
diff --git a/libexec/rtld-elf/rtld.h b/libexec/rtld-elf/rtld.h
index 2aabffe76afa..2bf95183c16e 100644
--- a/libexec/rtld-elf/rtld.h
+++ b/libexec/rtld-elf/rtld.h
@@ -58,7 +58,7 @@
#endif
#define NEW(type) ((type *) xmalloc(sizeof(type)))
-#define CNEW(type) ((type *) xcalloc(sizeof(type)))
+#define CNEW(type) ((type *) xcalloc(1, sizeof(type)))
/* We might as well do booleans like C++. */
typedef unsigned char bool;
@@ -319,7 +319,7 @@ typedef struct Struct_SymLook {
extern void _rtld_error(const char *, ...) __printflike(1, 2);
extern const char *rtld_strerror(int);
extern Obj_Entry *map_object(int, const char *, const struct stat *);
-extern void *xcalloc(size_t);
+extern void *xcalloc(size_t, size_t);
extern void *xmalloc(size_t);
extern char *xstrdup(const char *);
extern Elf_Addr _GLOBAL_OFFSET_TABLE_[];
diff --git a/libexec/rtld-elf/xmalloc.c b/libexec/rtld-elf/xmalloc.c
index 0d992257b986..3783685dc826 100644
--- a/libexec/rtld-elf/xmalloc.c
+++ b/libexec/rtld-elf/xmalloc.c
@@ -32,14 +32,17 @@
#include "rtld.h"
#include "rtld_printf.h"
-void *xcalloc(size_t);
-void *xmalloc(size_t);
-char *xstrdup(const char *);
-
void *
-xcalloc(size_t size)
+xcalloc(size_t number, size_t size)
{
- return memset(xmalloc(size), 0, size);
+ void *p;
+
+ p = calloc(number, size);
+ if (p == NULL) {
+ rtld_fdputstr(STDERR_FILENO, "Out of memory\n");
+ _exit(1);
+ }
+ return (p);
}
void *