From d5ca3bb3b45f8c3899a522283038fbfbbb14f242 Mon Sep 17 00:00:00 2001 From: Ben Kallus Date: Wed, 29 Oct 2025 08:38:51 -0400 Subject: [PATCH] IMPORT: cebtree: Replace offset calculation with offsetof to avoid UB This is the same as the equivalent fix in ebtree: The C standard specifies that it's undefined behavior to dereference NULL (even if you use & right after). The hand-rolled offsetof idiom &(((s*)NULL)->f) is thus technically undefined. This clutters the output of UBSan and is simple to fix: just use the real offsetof when it's available. This is cebtree commit 2d08958858c2b8a1da880061aed941324e20e748. --- include/import/cebtree-prv.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/import/cebtree-prv.h b/include/import/cebtree-prv.h index 221968af5..e20bff0ca 100644 --- a/include/import/cebtree-prv.h +++ b/include/import/cebtree-prv.h @@ -555,7 +555,7 @@ struct ceb_node *_ceb_descend(struct ceb_root **root, /* the parent will be the (possibly virtual) node so that * &lparent->l == root, i.e. container_of(root, struct ceb_node, b[0]). */ - lparent = (struct ceb_node *)((char *)root - (long)&((struct ceb_node *)0)->b[0]); + lparent = (struct ceb_node *)((char *)root - offsetof(struct ceb_node, b)); gparent = lparent; if (ret_nparent) *ret_nparent = NULL; -- 2.47.3