From cae67efbd9ddf2cee6bbefec076dc8933ababc43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Markstr=C3=B6m?= Date: Fri, 16 May 2014 10:10:38 +0800 Subject: [PATCH] Fix: Align buffers from objstack_alloc on sizeof(void *) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Upstream-Status: Backport The buffers from objstack_alloc will store pointers, so they must be aligned on a pointer's size, or else it will cause issues on the CPUs which do not support unaligned addresses access. Signed-off-by: Fredrik Markstrom Signed-off-by: Roy Li Signed-off-by: Jérémie Galarneau --- formats/ctf/metadata/objstack.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/formats/ctf/metadata/objstack.c b/formats/ctf/metadata/objstack.c index 9e264a4..14d9252 100644 --- a/formats/ctf/metadata/objstack.c +++ b/formats/ctf/metadata/objstack.c @@ -27,6 +27,7 @@ #include #include #include +#include #define OBJSTACK_INIT_LEN 128 #define OBJSTACK_POISON 0xcc @@ -39,7 +40,7 @@ struct objstack_node { struct bt_list_head node; size_t len; size_t used_len; - char data[]; + char __attribute__ ((aligned (sizeof(void *)))) data[]; }; BT_HIDDEN @@ -118,6 +119,8 @@ void *objstack_alloc(struct objstack *objstack, size_t len) struct objstack_node *last_node; void *p; + len = ALIGN(len, sizeof(void *)); + /* Get last node */ last_node = bt_list_entry(objstack->head.prev, struct objstack_node, node); -- 1.7.10.4