Commit 6d760a01 by Tom de Vries Committed by Tom de Vries

[libbacktrace] Don't point to released memory in backtrace_vector_release

When backtrace_vector_release is called with vec.size == 0, it releases the
memory pointed at by vec.base.

Set vec.base set to NULL if vec.size == 0 to ensure we don't point to released
memory.

Bootstrapped and reg-tested on x86_64.

2018-11-27  Tom de Vries  <tdevries@suse.de>

	* mmap.c (backtrace_vector_release): Same.
	* unittest.c (test1): Add check.

From-SVN: r266505
parent 0c155f24
2018-11-27 Tom de Vries <tdevries@suse.de> 2018-11-27 Tom de Vries <tdevries@suse.de>
* mmap.c (backtrace_vector_release): Same.
* unittest.c (test1): Add check.
2018-11-27 Tom de Vries <tdevries@suse.de>
* alloc.c (backtrace_vector_release): Handle vec->size == 0 using free * alloc.c (backtrace_vector_release): Handle vec->size == 0 using free
instead of realloc. instead of realloc.
* Makefile.am (check_PROGRAMS): Add unittest. * Makefile.am (check_PROGRAMS): Add unittest.
......
...@@ -321,5 +321,7 @@ backtrace_vector_release (struct backtrace_state *state, ...@@ -321,5 +321,7 @@ backtrace_vector_release (struct backtrace_state *state,
backtrace_free (state, (char *) vec->base + aligned, alc, backtrace_free (state, (char *) vec->base + aligned, alc,
error_callback, data); error_callback, data);
vec->alc = 0; vec->alc = 0;
if (vec->size == 0)
vec->base = NULL;
return 1; return 1;
} }
...@@ -69,7 +69,7 @@ test1 (void) ...@@ -69,7 +69,7 @@ test1 (void)
count = 0; count = 0;
res = backtrace_vector_release (state, &vec, error_callback, NULL); res = backtrace_vector_release (state, &vec, error_callback, NULL);
failed = res != 1 || count != 0; failed = res != 1 || count != 0 || vec.base != NULL;
printf ("%s: unittest backtrace_vector_release size == 0\n", printf ("%s: unittest backtrace_vector_release size == 0\n",
failed ? "FAIL": "PASS"); failed ? "FAIL": "PASS");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment