From 2000cdf6dc75103a7552952e03e30f8e40c8cdaa Mon Sep 17 00:00:00 2001 From: Carles Cufi Date: Fri, 3 Dec 2021 15:41:22 +0100 Subject: [PATCH] kernel: mmu: Fix access to unpacked member inside packed struct The following warning is triggered by GCC when -Waddress-of-packed-member is enabled: /home/carles/src/zephyr/zephyr/kernel/mmu.c: In function 'free_page_frame_list_put': /home/carles/src/zephyr/zephyr/kernel/mmu.c:383:42: warning: taking address of packed member of 'struct z_page_frame' may result in an unaligned pointer value [-Waddress-of-packed-member] 383 | sys_slist_append(&free_page_frame_list, &pf->node); This is due to the fact that sys_snode_t node is an unpacked structure inside a packed z_page_frame structure, so that the alignment of the former cannot be ensured if placed inside the latter. Given that alignment of z_page_frame is ensured by the code, silence the compiler by going through an intermediate variable. More info in #16587. Signed-off-by: Carles Cufi --- kernel/mmu.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel/mmu.c b/kernel/mmu.c index a35e36b8099..4dd96589adc 100644 --- a/kernel/mmu.c +++ b/kernel/mmu.c @@ -380,7 +380,10 @@ static void free_page_frame_list_put(struct z_page_frame *pf) { PF_ASSERT(pf, z_page_frame_is_available(pf), "unavailable page put on free list"); - sys_slist_append(&free_page_frame_list, &pf->node); + /* The structure is packed, which ensures that this is true */ + void *node = pf; + + sys_slist_append(&free_page_frame_list, node); z_free_page_count++; }