fd-util: Use /proc/pid/fd instead of /proc/self/fd
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 14 Aug 2023 19:57:59 +0000 (21:57 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 14 Aug 2023 20:43:12 +0000 (22:43 +0200)
commit4419735822d72744dad1c76a57463561b332897a
tree7f2e654fc19e153267244b2f78da0ed91c0e6346
parent2af02e61657aa513aa7b6df7fd1a04b13f853cef
fd-util: Use /proc/pid/fd instead of /proc/self/fd

Currently, we mount via file descriptors using /proc/self/fd. This
works, but it means that in /proc/mounts and various other files,
the source of the mount will be listed as /proc/self/fd/xxx. For other
software that parses these files, /proc/self/fd/xxx doesn't mean anything,
or worse, it means the completely wrong thing, as it will refer to one of
their own file descriptors instead.

Let's improve the situation by using /proc/pid/fd instead. This allows
processes parsing /proc/mounts to do the right thing more often than not.
One scenario where even this doesn't work if when containers are involved,
as with the pid namespace unshared, even /proc/pid/fd will mean the wrong
thing, but it's no worse than /proc/self/fd which will always means the wrong
thing.

This also doesn't work if we mount via file descriptor and then exit, as the pid will
be gone, but it does work as long as the process that did the mount is alive, which
makes it useful for systemd-dissect --with for example if the program we run in the
image wants to parse /proc/mounts.
src/basic/fd-util.h
src/test/test-fd-util.c