From c043c47ddd34b93a3ec9d6801176201f2411e44e Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Fri, 2 Nov 2012 17:50:50 +0000 Subject: [PATCH] pmap: use correct types for memory allocation Fixes error which did not happen always. Changes of being affected by the bug where greater the more there where pids defined as pmap argument. The debian bug referral can almost certainly reproduce the problem, especially when tried multiple times in row. pmap: malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed. Reported-by: lee Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=688180 Signed-off-by: Sami Kerola --- pmap.c | 2 +- proc/alloc.c | 4 ++-- proc/alloc.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pmap.c b/pmap.c index 4fb7a61c..742fcea9 100644 --- a/pmap.c +++ b/pmap.c @@ -661,7 +661,7 @@ int main(int argc, char **argv) x_option && (d_option || X_option)) xerrx(EXIT_FAILURE, _("options -d, -x, -X are mutually exclusive")); - pidlist = xmalloc(sizeof(unsigned) * argc); + pidlist = xmalloc(sizeof(unsigned long) * argc); while (*argv) { char *walk = *argv++; diff --git a/proc/alloc.c b/proc/alloc.c index 671d7523..94af47f7 100644 --- a/proc/alloc.c +++ b/proc/alloc.c @@ -50,14 +50,14 @@ void *xcalloc(unsigned int size) { return p; } -void *xmalloc(unsigned int size) { +void *xmalloc(size_t size) { void *p; if (size == 0) ++size; p = malloc(size); if (!p) { - xalloc_err_handler("%s failed to allocate %u bytes of memory", __func__, size); + xalloc_err_handler("%s failed to allocate %zu bytes of memory", __func__, size); exit(EXIT_FAILURE); } return(p); diff --git a/proc/alloc.h b/proc/alloc.h index 82b53592..19c91d78 100644 --- a/proc/alloc.h +++ b/proc/alloc.h @@ -9,7 +9,7 @@ EXTERN_C_BEGIN extern message_fn xalloc_err_handler; extern void *xcalloc(unsigned int size) MALLOC; -extern void *xmalloc(unsigned int size) MALLOC; +extern void *xmalloc(size_t size) MALLOC; extern void *xrealloc(void *oldp, unsigned int size) MALLOC; extern char *xstrdup(const char *str) MALLOC;