[pulseaudio-tickets] [Bug 45656] New: lacks handling of (not-so-)special cases in pa_make_secure_dir()
bugzilla-daemon at freedesktop.org
bugzilla-daemon at freedesktop.org
Sun Feb 5 13:16:31 PST 2012
https://bugs.freedesktop.org/show_bug.cgi?id=45656
Bug #: 45656
Summary: lacks handling of (not-so-)special cases in
pa_make_secure_dir()
Classification: Unclassified
Product: PulseAudio
Version: unspecified
Platform: All
OS/Version: Linux (All)
Status: NEW
Severity: normal
Priority: medium
Component: core
AssignedTo: pulseaudio-bugs at lists.freedesktop.org
ReportedBy: mike at altlinux.org
QAContact: pulseaudio-bugs at lists.freedesktop.org
CC: lennart at poettering.net
Created attachment 56630
--> https://bugs.freedesktop.org/attachment.cgi?id=56630
strace output
As of pulseaudio-1.1, both src/daemon/main.c::change_user() and
src/pulsecore/core-util.c::pa_make_secure_dir() are pretty ignorant of target
directory being already there with proper permissions and rush to
mkdir()/fchown()/fchmod() for no good reason.
My original problem occurs on r/o NFSv3 Linux 2.6.32 thin client root
filesystem while trying to run pulseaudio --system (used to work like charm
with 0.9.5):
# pulseaudio --system
W: [pulseaudio] main.c: Running in system mode, but --disallow-exit not set!
W: [pulseaudio] main.c: Running in system mode, but --disallow-module-loading
not set!
N: [pulseaudio] main.c: Running in system mode, forcibly disabling SHM mode!
N: [pulseaudio] main.c: Running in system mode, forcibly disabling exit idle
time!
E: [pulseaudio] core-util.c: Failed to create secure directory: Operation not
permitted
Here's localhost test re-run with r/w ext4 rootfs:
# pulseaudio --system -v -v
W: [pulseaudio] main.c: Running in system mode, but --disallow-exit not set!
W: [pulseaudio] main.c: Running in system mode, but --disallow-module-loading
not set!
N: [pulseaudio] main.c: Running in system mode, forcibly disabling SHM mode!
N: [pulseaudio] main.c: Running in system mode, forcibly disabling exit idle
time!
D: [pulseaudio] core-rtclock.c: Timer slack is set to 50 us.
D: [pulseaudio] core-util.c: setpriority() worked.
I: [pulseaudio] core-util.c: Successfully gained nice level -11.
I: [pulseaudio] main.c: Found user 'pulse' (UID 144) and group 'pulse' (GID
56).
I: [pulseaudio] main.c: Successfully dropped root privileges.
I: [pulseaudio] main.c: This is PulseAudio 1.1
D: [pulseaudio] main.c: Compilation host: i586-alt-linux-gnu
D: [pulseaudio] main.c: Compilation CFLAGS: -pipe -Wall -g -O2 -march=i586
-mtune=i686 -W -Wextra -Wno-long-long -Wvla -Wno-overlength-strings
-Wunsafe-loop-optimizations -Wundef -Wformat=2 -Wlogical-op -Wsign-compare
-Wformat-security -Wmissing-include-dirs -Wformat-nonliteral -Wpointer-arith
-Winit-self -Wdeclaration-after-statement -Wfloat-equal -Wmissing-prototypes
-Wredundant-decls -Wmissing-declarations -Wmissing-noreturn -Wshadow
-Wendif-labels -Wcast-align -Wstrict-aliasing -Wwrite-strings
-Wno-unused-parameter -ffast-math -Wp,-D_FORTIFY_SOURCE=2 -fno-common
-fdiagnostics-show-option
D: [pulseaudio] main.c: Running on host: Linux i686 3.2.2-std-pae-alt1 #1 SMP
Wed Feb 1 06:39:46 UTC 2012
D: [pulseaudio] main.c: Found 2 CPUs.
I: [pulseaudio] main.c: Page size is 4096 bytes
D: [pulseaudio] main.c: Compiled with Valgrind support: no
D: [pulseaudio] main.c: Running in valgrind mode: no
D: [pulseaudio] main.c: Running in VM: no
D: [pulseaudio] main.c: Optimized build: yes
D: [pulseaudio] main.c: All asserts enabled.
I: [pulseaudio] main.c: Machine ID is afe81388ef56429371ec614748402b92.
E: [pulseaudio] core-util.c: Failed to create secure directory: Operation not
permitted
# getent passwd pulse
pulse:x:144:56:Pulseaudio daemon:/var/run/pulse:/dev/null
# ls -ld /var/run/pulse
drwxrwx--x 2 root pulse 4096 Nov 17 15:46 /var/run/pulse
/var/run/pulse (0771,root,pulse) and the user/group prepared by ALT Linux
pulseaudio-system subpackage in both cases.
Syscalls up to the finishing rmdir() (included as a beacon not as a culprit,
full strace output attached):
umask(022) = 022
mkdir("/var/run/pulse", 0755) = -1 EEXIST (File exists)
umask(022) = 022
open("/var/run/pulse", O_RDONLY|O_NOCTTY|O_LARGEFILE|O_NOFOLLOW|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFDIR|0771, st_size=4096, ...}) = 0
getuid32() = 144
getgid32() = 56
fchown32(3, 144, 56) = -1 EPERM (Operation not permitted)
rmdir("/var/run/pulse") = -1 EACCES (Permission denied)
See also:
http://pulseaudio.org/ticket/539
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=628033
Seen also:
https://bugzilla.redhat.com/show_bug.cgi?id=508072
https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2009-1299
--
Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA Contact for the bug.
You are the assignee for the bug.
More information about the pulseaudio-bugs
mailing list