Fix: hlist iteration relies on undefined behavior
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 20 Apr 2021 20:07:54 +0000 (16:07 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 22 Apr 2021 12:33:00 +0000 (08:33 -0400)
commita0b5ef6802894441aae058f9a34628b565a35846
treeaa2a5d61119d54ee2b06874996e6a6687ee6f496
parent3abcdbd14d1b9291f06a4a4bbca313fcfbe5452b
Fix: hlist iteration relies on undefined behavior

Comparing an offset from an object with NULL is undefined behavior
and the compiler may assume that this is never true.

This is indeed what is observed with gcc-10 miscompiling
cds_hlist_for_each_entry_rcu_2().

Fix this by introducing cds_hlist_entry_safe() rather than open-coding
the NULL check comparisons, and move cds_hlist_for_each_entry_2()
and cds_hlist_for_each_entry_safe_2() to this scheme as well.

Fixes: #1308
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Ief3531cf04e54b6dae05eb28a6822adfa141fdeb
include/urcu/hlist.h
include/urcu/rcuhlist.h
This page took 0.025792 seconds and 4 git commands to generate.