From: Bruce Momjian <bruce@momjian.us>
To: walther@technowledgy.de
Cc: Thomas Munro <thomas.munro@gmail.com>
Cc: Peter Eisentraut <peter@eisentraut.org>
Cc: Christophe Pettus <xof@thebuild.com>
Cc: Andrew Dunstan <andrew@dunslane.net>
Cc: PostgreSQL Bugs <pgsql-bugs@lists.postgresql.org>
Cc: Tom Lane <tgl@sss.pgh.pa.us>
Subject: Re: Regression tests fail with musl libc because libpq.so can't be loaded
Date: Fri, 22 Mar 2024 09:36:19 -0400
Message-ID: <Zf2JU0_GDdbeBm5j@momjian.us> (raw)
In-Reply-To: <a2463df1-be45-4a76-b90f-7676d778e7b1@technowledgy.de>
References: <4095435.1710900216@sss.pgh.pa.us>
<CA+hUKGK2cSx3dveMqBD+E9N=zJ0WawBcbk_jnPqmdWBM0DT_3Q@mail.gmail.com>
<477fa513-6bf0-456d-8d24-1e22a19df671@technowledgy.de>
<ZfrmN4WHuJgD95fw@momjian.us>
<CA+hUKGJzC4rr2Yr=QZyx9W83Wv=TVJHndKF1anjNLNXVUM7TqQ@mail.gmail.com>
<f98cd8de-1c66-491a-8409-e62c09932080@technowledgy.de>
<36690fcf-f0c8-4d60-af49-6a7efa0e2b14@technowledgy.de>
<CA+hUKGJAkTZUa9JGr-zsadaqsN=K0P71t-1L2t2=MQFDMc4GuQ@mail.gmail.com>
<ZfzLsiXbguTDatiZ@momjian.us>
<a2463df1-be45-4a76-b90f-7676d778e7b1@technowledgy.de>
On Fri, Mar 22, 2024 at 09:33:38AM +0100, walther@technowledgy.de wrote:
> Bruce Momjian:
> > I suggest we use the #ifdef test to continue our existing behavior for
> > the libraries we know about, like glibc, and use the LD_* process title
> > truncation hack for libc's we don't recognize.
> >
> > Attached is a prototype patch which implements this based on previous
> > patches.
>
> The condition to check for linux/glibc in your patch is slightly off:
>
> #if ! defined(__linux__) || (! defined(__GLIBC__) && defined(__UCLIBC__ ))
>
> should be
>
> #if defined(__linux__) && ! (defined(__GLIBC__) || defined(__UCLIBC__ ))
>
> With the latter, it passes tests with musl.
Yes, my logic was wrong. Not sure what I was thinking, frankly.
I am not a big fan of negating a complex conditional, but would rather
pass the negation into the conditional, new patch attached.
--
Bruce Momjian <bruce@momjian.us> https://momjian.us
EDB https://enterprisedb.com
Only you can decide what is important to you.
Attachments:proctitle.diff (text/x-diff, 1.2K) downloaddiff --git a/src/backend/utils/misc/ps_status.c b/src/backend/utils/misc/ps_status.cindex 5d829e6e483..c0786d30937 100644--- a/src/backend/utils/misc/ps_status.c+++ b/src/backend/utils/misc/ps_status.c@@ -151,7 +151,32 @@ save_ps_display_args(int argc, char **argv)
for (i = 0; environ[i] != NULL; i++)
{
if (end_of_area + 1 == environ[i])
- end_of_area = environ[i] + strlen(environ[i]);+ {++ /* Do this for Linux libc libraries that might be unsafe. */+#if defined(__linux__) && (! defined(__GLIBC__) && ! defined(__UCLIBC__ ))+ /*+ * If we see variables that the musl runtime linker is known+ * to stash pointers to, give up so we don't break later calls+ * to dlopen().+ */+ if (strstr(environ[i], "LD_LIBRARY_PATH=") == environ[i] ||+ strstr(environ[i], "LD_PRELOAD=") == environ[i])+ {+ /*+ * We can overwrite the name, but stop at the equals sign.+ * Future loops will not find contiguous space, but we+ * don't break early because we want to count the total+ * number.+ */+ end_of_area = strchr(environ[i], '=');+ }+ else+#endif+ {+ end_of_area = environ[i] + strlen(environ[i]);+ }+ }
}
ps_buffer = argv[0];
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-bugs@postgresql.org
Cc: bruce@momjian.us, walther@technowledgy.de, thomas.munro@gmail.com, peter@eisentraut.org, xof@thebuild.com, andrew@dunslane.net, pgsql-bugs@lists.postgresql.org, tgl@sss.pgh.pa.us
Subject: Re: Regression tests fail with musl libc because libpq.so can't be loaded
In-Reply-To: <Zf2JU0_GDdbeBm5j@momjian.us>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox