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:18 +0000 (08:33 -0400)
commitdecfadf67412c383a6bdd674bea4da7ff4d9c1b4
treede911c44d51d2c9ba679db975de038ce12205f30
parent48da0279bc98de31fa9f046d6ff727028e82023c
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.025911 seconds and 4 git commands to generate.