mirror of
https://github.com/postgres/postgres.git
synced 2025-05-02 11:44:50 +03:00
Add macro to disable address safety instrumentation
fasthash_accum_cstring_aligned() uses a technique, found in various strlen() implementations, to detect a string's NUL terminator by reading a word at at time. That triggers failures when testing with "-fsanitize=address", at least with frontend code. To enable using this function anywhere, add a function attribute macro to disable such testing. Reviewed by Jeff Davis Discussion: https://postgr.es/m/CANWCAZbwvp7oUEkbw-xP4L0_S_WNKq-J-ucP4RCNDPJnrakUPw%40mail.gmail.com
This commit is contained in:
parent
4b968e2027
commit
db17594ad7
@ -135,6 +135,19 @@
|
|||||||
#define pg_nodiscard
|
#define pg_nodiscard
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This macro will disable address safety instrumentation for a function
|
||||||
|
* when running with "-fsanitize=address". Think twice before using this!
|
||||||
|
*/
|
||||||
|
#if defined(__clang__) || __GNUC__ >= 8
|
||||||
|
#define pg_attribute_no_sanitize_address() __attribute__((no_sanitize("address")))
|
||||||
|
#elif __has_attribute(no_sanitize_address)
|
||||||
|
/* This would work for clang, but it's deprecated. */
|
||||||
|
#define pg_attribute_no_sanitize_address() __attribute__((no_sanitize_address))
|
||||||
|
#else
|
||||||
|
#define pg_attribute_no_sanitize_address()
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Place this macro before functions that should be allowed to make misaligned
|
* Place this macro before functions that should be allowed to make misaligned
|
||||||
* accesses. Think twice before using it on non-x86-specific code!
|
* accesses. Think twice before using it on non-x86-specific code!
|
||||||
|
@ -213,8 +213,11 @@ fasthash_accum_cstring_unaligned(fasthash_state *hs, const char *str)
|
|||||||
*
|
*
|
||||||
* With an aligned pointer, we consume the string a word at a time.
|
* With an aligned pointer, we consume the string a word at a time.
|
||||||
* Loading the word containing the NUL terminator cannot segfault since
|
* Loading the word containing the NUL terminator cannot segfault since
|
||||||
* allocation boundaries are suitably aligned.
|
* allocation boundaries are suitably aligned. To keep from setting
|
||||||
|
* off alarms with address sanitizers, exclude this function from
|
||||||
|
* such testing.
|
||||||
*/
|
*/
|
||||||
|
pg_attribute_no_sanitize_address()
|
||||||
static inline size_t
|
static inline size_t
|
||||||
fasthash_accum_cstring_aligned(fasthash_state *hs, const char *str)
|
fasthash_accum_cstring_aligned(fasthash_state *hs, const char *str)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user