aboutsummaryrefslogtreecommitdiff
path: root/doc/src
diff options
context:
space:
mode:
authorJohn Naylor <john.naylor@postgresql.org>2024-06-21 14:59:11 +0700
committerJohn Naylor <john.naylor@postgresql.org>2024-06-21 17:29:39 +0700
commitfd49e8f32325c675d9bb6e26fcdbe9754249932f (patch)
treef28687948e414409b1469975d5878b57b53fb7d1 /doc/src
parentc5c82123d3050c3a5eef0f51e9783f1cc5004ba0 (diff)
downloadpostgresql-fd49e8f32325c675d9bb6e26fcdbe9754249932f.tar.gz
postgresql-fd49e8f32325c675d9bb6e26fcdbe9754249932f.zip
Prevent access of uninitialized memory in radix tree nodes
RT_NODE_16_SEARCH_EQ() performs comparisions using vector registers on x64-64 and aarch64. We apply a mask to the resulting bitfield to eliminate irrelevant bits that may be set. This ensures correct behavior, but Valgrind complains of the partially-uninitialised values. So far the warnings have only occurred on aarch64, which explains why this hasn't been seen earlier. To fix this warning, initialize the whole fixed-sized part of the nodes upon allocation, rather than just do the minimum initialization to function correctly. The initialization for node48 is a bit different in that the 256-byte slot index array must be populated with "invalid index" rather than zero. Experimentation has shown that compilers tend to emit code that uselessly memsets that array twice. To avoid pessimizing this path, swap the order of the slot_idxs[] and isset[] arrays so we can initialize with two non-overlapping memset calls. Reported by Tomas Vondra Analysis and patch by Tom Lane, reviewed by Masahiko Sawada. I investigated the behavior of memset calls to overlapping regions, leading to the above tweaks to node48 as discussed in the thread. Discussion: https://postgr.es/m/120c63ad-3d12-415f-a7bf-3da451c31bf6%40enterprisedb.com
Diffstat (limited to 'doc/src')
0 files changed, 0 insertions, 0 deletions