mirror of git://gcc.gnu.org/git/gcc.git
[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
This commit is contained in:
parent
0c155f24a9
commit
6d760a0197
|
|
@ -1,3 +1,8 @@
|
||||||
|
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>
|
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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
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");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue