]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* mmap.c (backtrace_vector_release): Make sure freed block is
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 29 Oct 2012 15:43:37 +0000 (15:43 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 29 Oct 2012 15:43:37 +0000 (15:43 +0000)
aligned on 8-byte boundary.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@192945 138bc75d-0d04-0410-961f-82ee72b054a4

libbacktrace/ChangeLog
libbacktrace/mmap.c

index 4850d9de37bd3a5a37cb35de4f24f5d341beeff1..f04f1d5dd0ddf144d73915618ca0852a213007cc 100644 (file)
@@ -1,3 +1,8 @@
+2012-10-29  Ian Lance Taylor  <iant@google.com>
+
+       * mmap.c (backtrace_vector_release): Make sure freed block is
+       aligned on 8-byte boundary.
+
 2012-10-26  Ian Lance Taylor  <iant@google.com>
 
        PR other/55087
index e07810d4575e64cf9cf43d35e9e730cbd44d14fd..25fdc21a9f7e32f36a3c74c1cea3ba5b578ec2bf 100644 (file)
@@ -229,8 +229,18 @@ backtrace_vector_release (struct backtrace_state *state,
                          backtrace_error_callback error_callback,
                          void *data)
 {
-  backtrace_free (state, (char *) vec->base + vec->size, vec->alc,
-                 error_callback, data);
+  size_t size;
+  size_t alc;
+  size_t aligned;
+
+  /* Make sure that the block that we free is aligned on an 8-byte
+     boundary.  */
+  size = vec->size;
+  alc = vec->alc;
+  aligned = (size + 7) & ~ (size_t) 7;
+  alc -= aligned - size;
+
+  backtrace_free (state, (char *) vec->base + size, alc, error_callback, data);
   vec->alc = 0;
   return 1;
 }