From: Ben Kallus Date: Wed, 29 Oct 2025 12:38:51 +0000 (-0400) Subject: IMPORT: cebtree: Replace offset calculation with offsetof to avoid UB X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;ds=sidebyside;p=thirdparty%2Fhaproxy.git 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. --- 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;