diff options
author | Geoff Levand <geoff@infradead.org> | 2018-08-08 13:24:50 -0700 |
---|---|---|
committer | Samuel Mendoza-Jonas <sam@mendozajonas.com> | 2018-08-14 11:10:14 +1000 |
commit | 7e8bc8b93ce67eda63c5a252fb051ca83979dd5b (patch) | |
tree | 1d503685746cf97fb68320ef6b3381f8806803f6 | |
parent | 3b4f88057e95418bc548542b5b9a13910905c93d (diff) | |
download | talos-petitboot-7e8bc8b93ce67eda63c5a252fb051ca83979dd5b.tar.gz talos-petitboot-7e8bc8b93ce67eda63c5a252fb051ca83979dd5b.zip |
lib/talloc: Fix TALLOC_ABORT
The current TALLOC_ABORT macro had a number of problems.
Failures were not going to the pb log, but only to stderr.
If the object passed in was not a talloc object the printing
of an object name would be printing random data.
The use of a macro obscured the code.
To clean this up, remove all reference to TALLOC_ABORT and
put the logging and abort calls directly into talloc_chunk_from_ptr.
Signed-off-by: Geoff Levand <geoff@infradead.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
-rw-r--r-- | lib/talloc/talloc.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/lib/talloc/talloc.c b/lib/talloc/talloc.c index d3e2065..e275fb0 100644 --- a/lib/talloc/talloc.c +++ b/lib/talloc/talloc.c @@ -40,13 +40,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> - -#if !defined(NDEBUG) #include <assert.h> -#define TALLOC_ABORT(reason) do{ \ - fprintf(stderr, "%s: name: %s\n", __func__, tc->name); \ - assert(0 && reason);} while (0) -#endif #ifdef HAVE_SYS_TYPES_H #include <sys/types.h> @@ -66,6 +60,7 @@ #include <stdint.h> #endif +#include "log/log.h" #include "talloc.h" /* use this to force every realloc to change the pointer, to stress test @@ -78,12 +73,6 @@ #define TALLOC_MAGIC_FREE 0x7faebef3 #define TALLOC_MAGIC_REFERENCE ((const char *)1) -/* by default we abort when given a bad pointer (such as when talloc_free() is - * called on a pointer that came from malloc() */ -#ifndef TALLOC_ABORT -#define TALLOC_ABORT(reason) abort() -#endif - #ifndef discard_const_p #if defined(__intptr_t_defined) || defined(HAVE_INTPTR_T) # define discard_const_p(type, ptr) ((type *)((intptr_t)(ptr))) @@ -126,10 +115,16 @@ static struct talloc_chunk *talloc_chunk_from_ptr(const void *ptr) struct talloc_chunk *tc = discard_const_p(struct talloc_chunk, ptr)-1; if (tc->u.magic != TALLOC_MAGIC) { if (tc->u.magic == TALLOC_MAGIC_FREE) { - TALLOC_ABORT("Bad talloc magic value - double free"); + pb_log_fn("Failed: Bad talloc magic value - double free, for name: %s\n", + tc->name); + fprintf(stderr, "%s: name: %s\n", __func__, tc->name); + fflush(stderr); + assert(0 && "Bad talloc magic value - double free"); } else { - TALLOC_ABORT("Bad talloc magic value - unknown value"); + pb_log_fn("Failed: Bad talloc magic value - unknown value\n"); + assert(0 && "Bad talloc magic value - unknown value"); } + abort(); } return tc; |