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
Rather than explicitly set alignment in callers, mark the structure itself with an alignment constraint. Fixes: 3340202f5954 ("stack: add lock-free implementation") Signed-off-by: David Marchand <david.march...@redhat.com> Acked-by: Bruce Richardson <bruce.richard...@intel.com> Acked-by: Konstantin Ananyev <konstantin.anan...@huawei.com> --- Changes since v3: - changed rte_stack_lf_head struct alignment, --- devtools/libabigail.abignore | 8 ++++++++ lib/stack/rte_stack.h | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore index 96ae32455f..c65bea2b51 100644 --- a/devtools/libabigail.abignore +++ b/devtools/libabigail.abignore @@ -47,3 +47,11 @@ name = rte_node has_size_change = no has_data_member_inserted_between = {offset_after(original_process), offset_of(xstat_off)} + +;;;;;;;;;;;;;;;;;;; +; DONT MERGE THIS ; +;;;;;;;;;;;;;;;;;;; + +[suppress_type] + name = rte_stack_lf_list + has_size_change = yes diff --git a/lib/stack/rte_stack.h b/lib/stack/rte_stack.h index 4439adfc42..fd17ac791d 100644 --- a/lib/stack/rte_stack.h +++ b/lib/stack/rte_stack.h @@ -33,14 +33,14 @@ struct rte_stack_lf_elem { struct rte_stack_lf_elem *next; /**< Next pointer */ }; -struct rte_stack_lf_head { +struct __rte_aligned(16) rte_stack_lf_head { struct rte_stack_lf_elem *top; /**< Stack top */ uint64_t cnt; /**< Modification counter for avoiding ABA problem */ }; struct rte_stack_lf_list { /** List head */ - alignas(16) struct rte_stack_lf_head head; + struct rte_stack_lf_head head; /** List len */ RTE_ATOMIC(uint64_t) len; }; -- 2.50.0