mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-29 05:40:23 -04:00
Remove exploitable LD_BIND_NOW hack (CVE-2009-1894).
Instead of trying to re-execute pulseaudio itself with LD_BIND_NOW set, just find the correct flag for the linker to request immediate bindings (all ELF files support that option), and use that when linking the daemon. Reduce the amount of compiled and executed code as well.
This commit is contained in:
parent
dce6af5fef
commit
abf6dfbc62
3 changed files with 8 additions and 24 deletions
|
|
@ -114,6 +114,12 @@ CC_CHECK_LDFLAGS([${tmp_ldflag}],
|
|||
[VERSIONING_LDFLAGS='-Wl,-version-script=$(srcdir)/map-file'])
|
||||
AC_SUBST([VERSIONING_LDFLAGS])
|
||||
|
||||
dnl Use immediate (now) bindings; avoids the funky re-call in itself
|
||||
dnl the -z now syntax is lifted from Sun's linker and works with GNU's too
|
||||
dnl other linkes might be added later
|
||||
CC_CHECK_LDFLAGS([-Wl,-z,now], [IMMEDIATE_LDFLAGS="-Wl,-z,now"])
|
||||
AC_SUBST([IMMEDIATE_LDFLAGS])
|
||||
|
||||
dnl Check whether to build tests by default (as compile-test) or not
|
||||
AC_ARG_ENABLE([default-build-tests],
|
||||
AS_HELP_STRING([--disable-default-build-tests], [Build test programs only during make check]))
|
||||
|
|
|
|||
|
|
@ -153,9 +153,9 @@ PREOPEN_LIBS = $(modlibexec_LTLIBRARIES)
|
|||
endif
|
||||
|
||||
if FORCE_PREOPEN
|
||||
pulseaudio_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) -dlpreopen force $(foreach f,$(PREOPEN_LIBS),-dlpreopen $(f))
|
||||
pulseaudio_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) $(IMMEDIATE_LDFLAGS) -dlpreopen force $(foreach f,$(PREOPEN_LIBS),-dlpreopen $(f))
|
||||
else
|
||||
pulseaudio_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) -dlopen force $(foreach f,$(PREOPEN_LIBS),-dlopen $(f))
|
||||
pulseaudio_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) $(IMMEDIATE_LDFLAGS) -dlopen force $(foreach f,$(PREOPEN_LIBS),-dlopen $(f))
|
||||
endif
|
||||
|
||||
if HAVE_POLKIT
|
||||
|
|
|
|||
|
|
@ -399,28 +399,6 @@ int main(int argc, char *argv[]) {
|
|||
pa_log_set_level(PA_LOG_NOTICE);
|
||||
pa_log_set_flags(PA_LOG_COLORS|PA_LOG_PRINT_FILE|PA_LOG_PRINT_LEVEL, PA_LOG_RESET);
|
||||
|
||||
#if defined(__linux__) && defined(__OPTIMIZE__)
|
||||
/*
|
||||
Disable lazy relocations to make usage of external libraries
|
||||
more deterministic for our RT threads. We abuse __OPTIMIZE__ as
|
||||
a check whether we are a debug build or not.
|
||||
*/
|
||||
|
||||
if (!getenv("LD_BIND_NOW")) {
|
||||
char *rp;
|
||||
|
||||
/* We have to execute ourselves, because the libc caches the
|
||||
* value of $LD_BIND_NOW on initialization. */
|
||||
|
||||
pa_set_env("LD_BIND_NOW", "1");
|
||||
|
||||
if ((rp = pa_readlink("/proc/self/exe")))
|
||||
pa_assert_se(execv(rp, argv) == 0);
|
||||
else
|
||||
pa_log_warn("Couldn't read /proc/self/exe, cannot self execute. Running in a chroot()?");
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_GETUID
|
||||
real_root = getuid() == 0;
|
||||
suid_root = !real_root && geteuid() == 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue