Skip to content

Commit 2000cdf

Browse files
committed
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 <[email protected]>
1 parent 6b46ea3 commit 2000cdf

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

kernel/mmu.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,10 @@ static void free_page_frame_list_put(struct z_page_frame *pf)
380380
{
381381
PF_ASSERT(pf, z_page_frame_is_available(pf),
382382
"unavailable page put on free list");
383-
sys_slist_append(&free_page_frame_list, &pf->node);
383+
/* The structure is packed, which ensures that this is true */
384+
void *node = pf;
385+
386+
sys_slist_append(&free_page_frame_list, node);
384387
z_free_page_count++;
385388
}
386389

0 commit comments

Comments
 (0)