[pulseaudio-discuss] [PATCH v2 00/12] Introduce memfd support
Ahmed S. Darwish
darwish.07 at gmail.com
Thu Feb 11 23:59:27 UTC 2016
Hello!
The all-improved memfd patch series ;-)
==> v1 cover letter:
Memfd is a simple memory sharing mechanism, added by the systemd/kdbus
developers, to share pages between processes in an anonymous, no
global registry needed, no mount-point required, relatively secure,
manner.
This patch series introduces memfd support to PulseAudio, laying out
the necessary (but not yet sufficient) groundwork for sandboxing,
protecting PulseAudio from its clients, and protecting clients from
each other.
Memfd support is added in quite a transparent manner, respecting
current PA mechanisms and abstractions. The lower-level layers are
properly refactored and extended: the srbchannel communication path
is transformed to memfds by only changing a single line of code.
==> v2 changes:
- All pools (srbchannel + client audio data mempool + global mempool)
now use memfds by default. An empty /dev/shm FTW! ;-)
- Design issues pointed by David now fixed, leading to a much smaller
code.. New memfd implementation now shares almost all of the
existing posix SHM code paths.
- Heavy focus on not leaking any file descriptors throughout the
code. Every fd, sent and received, has a clear owner responsible
for closing it at appropriate times.
- If a mempool is memfd-backed, we now require registering it with
the pstream before sending any blocks it covers. This is done to
to minimize fd passing overhead and the possibility of fd leaks.
- A new, special, pstream packet type is introduced. That special
packet can be sent anytime during the pstrem's lifetime and is
used for creating on demand SHM ID to memfd mappings.
- All issues pointed by Tanu's very detailed review (vacuuming,
memfd enablement over pstream, protocol changes, etc.) now fixed
- Testing! I've been heavily using these patches now for three
weeks without visible issues.
==> references:
- v1 submission
http://thread.gmane.org/gmane.comp.audio.pulseaudio.general/24110
- memfd_create(2), David Herrmann [memfd author]
https://dvdhrm.wordpress.com/2014/06/10/memfd_create2/
- xdg-app
https://wiki.gnome.org/Projects/SandboxedApps
==> diffstat:
Ahmed S. Darwish (12):
pulsecore: Cache daemon shm size inside pa_core
pulsecore: srbchannel: Introduce per-client SHM files
pulsecore: Transform pa_mempool_new() into a factory method
pulsecore: Split pa_shm mempool backend into pa_shm and pa_privatemem
pulsecore: SHM: Introduce memfd support
pulsecore: memexport/memimport: Support memfd blocks
pulsecore, tests: Use new memexport/memimport API
pulsecore: Specially mark global mempools
pulsecore: pstream: Support memfd blocks transport
srbchannel: Use memfd transport by default; pump protocol version
pulse: client audio: Use memfd transport by default
core: Use memfd transport by default
PROTOCOL | 13 ++
configure.ac | 21 +++-
man/pulse-client.conf.5.xml.in | 5 +
man/pulse-daemon.conf.5.xml.in | 5 +
man/pulseaudio.1.xml.in | 11 ++
shell-completion/bash/pulseaudio | 4 +-
shell-completion/zsh/_pulseaudio | 1 +
src/Makefile.am | 7 ++
src/daemon/cmdline.c | 13 +-
src/daemon/daemon-conf.c | 1 +
src/daemon/daemon-conf.h | 1 +
src/daemon/main.c | 4 +-
src/pulse/client-conf.c | 1 +
src/pulse/client-conf.h | 2 +-
src/pulse/context.c | 48 +++++++-
src/pulse/internal.h | 2 +
src/pulsecore/core.c | 31 +++--
src/pulsecore/core.h | 13 +-
src/pulsecore/mem.h | 67 ++++++++++
src/pulsecore/memblock.c | 245 ++++++++++++++++++++++++++++++++-----
src/pulsecore/memblock.h | 18 ++-
src/pulsecore/memfd-wrappers.h | 68 +++++++++++
src/pulsecore/privatemem.c | 78 ++++++++++++
src/pulsecore/privatemem.h | 35 ++++++
src/pulsecore/protocol-native.c | 92 ++++++++++++--
src/pulsecore/pstream.c | 257 +++++++++++++++++++++++++++++++++++----
src/pulsecore/pstream.h | 2 +
src/pulsecore/shm.c | 247 +++++++++++++++++++------------------
src/pulsecore/shm.h | 33 ++++-
src/tests/cpu-mix-test.c | 2 +-
src/tests/lfe-filter-test.c | 2 +-
src/tests/mcalign-test.c | 2 +-
src/tests/memblock-test.c | 15 +--
src/tests/memblockq-test.c | 2 +-
src/tests/mix-test.c | 2 +-
src/tests/remix-test.c | 2 +-
src/tests/resampler-test.c | 2 +-
src/tests/srbchannel-test.c | 2 +-
38 files changed, 1119 insertions(+), 237 deletions(-)
create mode 100644 src/pulsecore/mem.h
create mode 100644 src/pulsecore/memfd-wrappers.h
create mode 100644 src/pulsecore/privatemem.c
create mode 100644 src/pulsecore/privatemem.h
Regards,
--
Darwish
http://darwish.chasingpointers.com
More information about the pulseaudio-discuss
mailing list