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.
/* 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;