untrusted comment: verify with openbsd-65-base.pub
RWSZaRmt1LEQT3kReh6/cjCR/7pax79ZCqq0gf4Hc3+k2niDthH6uj+9rK5LNvzflWf54udoiHYotBCBvGd4xGMdI4LLAhOK4wk=
OpenBSD 6.5 errata 024, December 11, 2019:
ld.so may fail to remove the LD_LIBRARY_PATH environment variable for
set-user-ID and set-group-ID executables in low memory conditions.
Apply by doing:
signify -Vep /etc/signify/openbsd-65-base.pub -x 024_ldso.patch.sig \
-m - | (cd /usr/src && patch -p0)
And then rebuild and install ld.so:
cd /usr/src/libexec/ld.so
make obj
make
make install
Index: libexec/ld.so/loader.c
===================================================================
RCS file: /cvs/src/libexec/ld.so/loader.c,v
diff -u -p -u -r1.177 loader.c
--- libexec/ld.so/loader.c 3 Dec 2018 05:29:56 -0000 1.177
+++ libexec/ld.so/loader.c 11 Dec 2019 17:06:10 -0000
@@ -213,13 +213,14 @@ char *__progname = NULL;
void
_dl_setup_env(const char *argv0, char **envp)
{
+ char *libpath;
static char progname_storage[NAME_MAX+1] = "";
/*
* Get paths to various things we are going to use.
*/
_dl_debug = _dl_getenv("LD_DEBUG", envp) != NULL;
- _dl_libpath = _dl_split_path(_dl_getenv("LD_LIBRARY_PATH", envp));
+ libpath = _dl_getenv("LD_LIBRARY_PATH", envp);
_dl_preload = _dl_getenv("LD_PRELOAD", envp);
_dl_bindnow = _dl_getenv("LD_BIND_NOW", envp) != NULL;
_dl_traceld = _dl_getenv("LD_TRACE_LOADED_OBJECTS", envp) != NULL;
@@ -233,9 +234,8 @@ _dl_setup_env(const char *argv0, char **
*/
_dl_trust = !_dl_issetugid();
if (!_dl_trust) { /* Zap paths if s[ug]id... */
- if (_dl_libpath) {
- _dl_free_path(_dl_libpath);
- _dl_libpath = NULL;
+ if (libpath) {
+ libpath = NULL;
_dl_unsetenv("LD_LIBRARY_PATH", envp);
}
if (_dl_preload) {
@@ -251,6 +251,8 @@ _dl_setup_env(const char *argv0, char **
_dl_unsetenv("LD_DEBUG", envp);
}
}
+ if (libpath)
+ _dl_libpath = _dl_split_path(libpath);
environ = envp;
_dl_trace_setup(envp);