diff mbox series

[ovs-dev,01/11] util: Avoid false positive UB when iterating collections.

Message ID 20211217131646.30994.85869.stgit@dceara.remote.csb
State Superseded
Headers show
Series Fix UndefinedBehaviorSanitizer reported issues and enable it in CI. | expand


Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test success github build: passed

Commit Message

Dumitru Ceara Dec. 17, 2021, 1:16 p.m. UTC
UB Sanitizer was flagging OBJECT_CONTAINING() as undefined behavior
due to the way it's used when iterating through collections, e.g.,
HMAP_FOR_EACH_INIT().  However, in such cases we don't actually
dereference the pointer, we just use its value.  Avoid the undefined
behavior by casting to 'void *' first.

Signed-off-by: Dumitru Ceara <dceara@redhat.com>
 include/openvswitch/util.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff mbox series


diff --git a/include/openvswitch/util.h b/include/openvswitch/util.h
index 228b185c3a5f..cfbd5f1a3375 100644
--- a/include/openvswitch/util.h
+++ b/include/openvswitch/util.h
@@ -128,7 +128,7 @@  OVS_NO_RETURN void ovs_assert_failure(const char *, const char *, const char *);
  * from the type of '*OBJECT'. */
 #define OBJECT_CONTAINING(POINTER, OBJECT, MEMBER)                      \
     ((OVS_TYPEOF(OBJECT)) (void *)                                      \
+     ((uintptr_t)(void *)(POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
 /* Given POINTER, the address of the given MEMBER within an object of the type
  * that that OBJECT points to, assigns the address of the outer object to