Caught by UBSan: ../lib/eal/x86/include/rte_atomic_64.h:206:21: runtime error: member access within misaligned address 0x7ffd9c67f228 for type 'const rte_int128_t', which requires 16 byte alignment 0x7ffd9c67f228: note: pointer points here 00 00 00 00 c0 5d 3e 00 01 00 00 00 01 00 00 00 00 00 00 00 ^ 00 00 00 00 00 00 00 00 00 00 00 00 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../lib/eal/x86/include/rte_atomic_64.h:206:21 in ../lib/eal/x86/include/rte_atomic_64.h:206:21: runtime error: member access within misaligned address 0x7ffd9c67f228 for type 'const union rte_int128_t::(anonymous at ../lib/eal/include/generic/rte_atomic.h:1102:2)', which requires 16 byte alignment 0x7ffd9c67f228: note: pointer points here 00 00 00 00 c0 5d 3e 00 01 00 00 00 01 00 00 00 00 00 00 00 ^ 00 00 00 00 00 00 00 00 00 00 00 00 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../lib/eal/x86/include/rte_atomic_64.h:206:21 in ../lib/eal/x86/include/rte_atomic_64.h:206:16: runtime error: load of misaligned address 0x7ffd9c67f228 for type 'const uint64_t' (aka 'const unsigned long'), which requires 16 byte alignment 0x7ffd9c67f228: note: pointer points here 00 00 00 00 c0 5d 3e 00 01 00 00 00 01 00 00 00 00 00 00 00 ^ 00 00 00 00 00 00 00 00 00 00 00 00 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../lib/eal/x86/include/rte_atomic_64.h:206:21 in
Fixes: 3340202f5954 ("stack: add lock-free implementation") Cc: sta...@dpdk.org Signed-off-by: David Marchand <david.march...@redhat.com> --- lib/stack/rte_stack_lf_c11.h | 8 ++++---- lib/stack/rte_stack_lf_generic.h | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/stack/rte_stack_lf_c11.h b/lib/stack/rte_stack_lf_c11.h index b97e02d6a1..f674731235 100644 --- a/lib/stack/rte_stack_lf_c11.h +++ b/lib/stack/rte_stack_lf_c11.h @@ -63,13 +63,13 @@ __rte_stack_lf_push_elems(struct rte_stack_lf_list *list, struct rte_stack_lf_elem *last, unsigned int num) { - struct rte_stack_lf_head old_head; + alignas(16) struct rte_stack_lf_head old_head; int success; old_head = list->head; do { - struct rte_stack_lf_head new_head; + alignas(16) struct rte_stack_lf_head new_head; /* Swing the top pointer to the first element in the list and * make the last element point to the old top. @@ -102,7 +102,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *list, void **obj_table, struct rte_stack_lf_elem **last) { - struct rte_stack_lf_head old_head; + alignas(16) struct rte_stack_lf_head old_head; uint64_t len; int success = 0; @@ -129,7 +129,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *list, /* Pop num elements */ do { - struct rte_stack_lf_head new_head; + alignas(16) struct rte_stack_lf_head new_head; struct rte_stack_lf_elem *tmp; unsigned int i; diff --git a/lib/stack/rte_stack_lf_generic.h b/lib/stack/rte_stack_lf_generic.h index cc69e4d168..32f56dffdd 100644 --- a/lib/stack/rte_stack_lf_generic.h +++ b/lib/stack/rte_stack_lf_generic.h @@ -36,13 +36,13 @@ __rte_stack_lf_push_elems(struct rte_stack_lf_list *list, struct rte_stack_lf_elem *last, unsigned int num) { - struct rte_stack_lf_head old_head; + alignas(16) struct rte_stack_lf_head old_head; int success; old_head = list->head; do { - struct rte_stack_lf_head new_head; + alignas(16) struct rte_stack_lf_head new_head; /* An acquire fence (or stronger) is needed for weak memory * models to establish a synchronized-with relationship between @@ -77,7 +77,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *list, void **obj_table, struct rte_stack_lf_elem **last) { - struct rte_stack_lf_head old_head; + alignas(16) struct rte_stack_lf_head old_head; int success = 0; /* Reserve num elements, if available */ @@ -99,7 +99,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *list, /* Pop num elements */ do { - struct rte_stack_lf_head new_head; + alignas(16) struct rte_stack_lf_head new_head; struct rte_stack_lf_elem *tmp; unsigned int i; -- 2.49.0