From: | Andres Freund <andres(at)anarazel(dot)de> |
---|---|
To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
Subject: | pgsql: Add workaround to make ubsan and ps_status.c compatible |
Date: | 2022-11-21 22:01:02 |
Message-ID: | E1oxEqb-000GmH-Jn@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Add workaround to make ubsan and ps_status.c compatible
At least on linux, set_ps_display() breaks /proc/$pid/environ. The sanitizer's
helper library uses /proc/$pid/environ to implement getenv(), as it wants to
work independent of libc. When just using undefined and alignment sanitizers,
the sanitizer library is only initialized when the first error occurs, by
which time we've often already called set_ps_display(), preventing the
sanitizer libraries from seeing the options.
We can work around that by defining __ubsan_default_options, a weak symbol
libsanitizer uses to get defaults from the application, and return
getenv("UBSAN_OPTIONS"). But only if main already was reached, so that we
don't end up relying on a not-yet-working getenv().
As it's just a function that won't get called when not running a sanitizer, it
doesn't seem necessary to make compilation of the function conditional.
Reviewed-by: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Discussion: https://postgr.es/m/20220323173537.ll7klrglnp4gn2um@alap3.anarazel.de
Branch
------
master
Details
-------
https://git.postgresql.org/pg/commitdiff/f686ae82f2d7e29facde8300209deef7abe13605
Modified Files
--------------
src/backend/main/main.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2022-11-21 22:07:46 | pgsql: Add comments and a missing CHECK_FOR_INTERRUPTS in ts_headline. |
Previous Message | Tom Lane | 2022-11-21 20:40:47 | pgsql: Revert "Prevent instability in contrib/pageinspect's regression |