Package: util-linux
Version: 2.33.1-0.1
Severity: normal

Dear Maintainer,

   * What led up to the situation?

I tried using unshare and nsenter with the pid (and mount) persistent 
namespaces.
So I created new namespaces using unshare and tried to enter them using nsenter.

   * What exactly did you do (or not do) that was effective (or
     ineffective)?

Providing nsenter with the same persistent PID namespace file did not result in 
entering the same PID namespace.

console #1

 ~ # mount --make-private /
 ~ # touch /tmp/test-{pid,mnt}
 ~ # unshare --pid=/tmp/test-pid --mount=/tmp/test-mnt --fork --mount-proc
 ~ # ps faxu
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  1.0  0.0   9652  4876 pts/7    S    23:22   0:00 -bash
root         8  0.0  0.0  12156  3144 pts/7    R+   23:22   0:00 ps faxu
 ~ # mount
[all host mounts repeated here]
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
 ~ #

   * What was the outcome of this action?

console #2 (with console #1 still open)

 ~ # nsenter --mount=/tmp/test-mnt --pid=/tmp/test-pid
 / # ps faxu
Error, do this: mount -t proc proc /proc
 / # mount
  mount: failed to read mtab: Datei oder Verzeichnis nicht gefunden

console #3 (with console #1 + #2 still open)

~ # lsns --output-all -u
        NS TYPE   PATH               NPROCS   PID  PPID COMMAND                 
                                                               UID USER         
NETNSID NSFS
4026531835 cgroup /proc/1/ns/cgroup     420     1     0 /sbin/init noibrs 
noibpb nopti nospectre_v2 nospec_store_bypass_disable no_stf_barrier   0 root   
              
4026531836 pid    /proc/1/ns/pid        419     1     0 /sbin/init noibrs 
noibpb nopti nospectre_v2 nospec_store_bypass_disable no_stf_barrier   0 root   
              /tmp/test-pid
4026531837 user   /proc/1/ns/user       420     1     0 /sbin/init noibrs 
noibpb nopti nospectre_v2 nospec_store_bypass_disable no_stf_barrier   0 root   
              
4026531838 uts    /proc/1/ns/uts        420     1     0 /sbin/init noibrs 
noibpb nopti nospectre_v2 nospec_store_bypass_disable no_stf_barrier   0 root   
              
4026531839 ipc    /proc/1/ns/ipc        420     1     0 /sbin/init noibrs 
noibpb nopti nospectre_v2 nospec_store_bypass_disable no_stf_barrier   0 root   
              
4026531840 mnt    /proc/1/ns/mnt        395     1     0 /sbin/init noibrs 
noibpb nopti nospectre_v2 nospec_store_bypass_disable no_stf_barrier   0 root   
              
4026531860 mnt    /proc/50/ns/mnt         1    50     2 kdevtmpfs               
                                                                 0 root         
        
4026532000 net    /proc/1/ns/net        420     1     0 /sbin/init noibrs 
noibpb nopti nospectre_v2 nospec_store_bypass_disable no_stf_barrier   0 root   
   unassigned 
4026532199 mnt    /proc/436/ns/mnt        1   436     1 
/lib/systemd/systemd-udevd                                                      
         0 root                 
4026532209 mnt    /proc/718/ns/mnt        1   718     1 /usr/sbin/irqbalance 
--foreground                                                        0 root      
           
4026532361 mnt    /proc/17407/ns/mnt      4 17407 15596 unshare 
--pid=/tmp/test-pid --mount=/tmp/test-mnt --fork --mount-proc                   
 0 root                 /tmp/test-mnt
4026532362 pid    /proc/17409/ns/pid      1 17409 17407 -bash                   
                                                                 0 root         
        

~ # ps faxu
[excerpt]
root     17407  0.0  0.0   6772   756 pts/7    S    23:22   0:00  |           
\_ unshare --pid=/tmp/test-pid --mount=/tmp/test-mnt --fork --mount-proc
root     17409  0.0  0.0   9652  4876 pts/7    S+   23:22   0:00  |             
  \_ -bash

   * What outcome did you expect instead?

I expected nsenter to join the pid namespace given.
I expected /tmp/test-pid to not shared PID namespace with /init but instead 
with PID 17409.

This is probably due to the PID namespace not affecting the unshare main 
process after the unshare syscall, but only its child processes.
Therefore bind_ns_files_from_child should probably call bind_ns_files not with 
the parent (unshare process) process id but its child process id.
To fix it, instead of ns/pid, ns/pid_for_children could be used. Though, 
ns/pid_for_children is empty before the first child has been created, so 
unshare.c needs some more work than just replacing ns/pid with 
ns/pid_for_children.

-- System Information:
Debian Release: 10.1
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 4.19.0-6-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL 
set to de_DE.utf8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL set 
to de_DE.utf8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages util-linux depends on:
ii  fdisk          2.33.1-0.1
ii  libaudit1      1:2.8.4-3
ii  libblkid1      2.33.1-0.1
ii  libc6          2.28-10
ii  libcap-ng0     0.7.9-2
ii  libmount1      2.33.1-0.1
ii  libpam0g       1.3.1-5
ii  libselinux1    2.8-1+b1
ii  libsmartcols1  2.33.1-0.1
ii  libsystemd0    241-7~deb10u1
ii  libtinfo6      6.1+20181013-2+deb10u1
ii  libudev1       241-7~deb10u1
ii  libuuid1       2.33.1-0.1
ii  login          1:4.5-1.1
ii  zlib1g         1:1.2.11.dfsg-1

util-linux recommends no packages.

Versions of packages util-linux suggests:
pn  dosfstools          <none>
ii  kbd                 2.0.4-4
pn  util-linux-locales  <none>

-- debconf information:
  util-linux/noauto-with-nonzero-passnum:

Reply via email to