On Fri, Jan 22, 2021 at 7:31 PM Tyler Hicks <code@xxxxxxxxxxx> wrote: > > On 2021-01-19 17:22:03, Miklos Szeredi wrote: > > Prior to commit 7c03e2cda4a5 ("vfs: move cap_convert_nscap() call into > > vfs_setxattr()") the translation of nscap->rootid did not take stacked > > filesystems (overlayfs and ecryptfs) into account. > > > > That patch fixed the overlay case, but made the ecryptfs case worse. > > Thanks for sending a fix! > > I know that you don't have an eCryptfs setup to test with but I'm at a > loss about how to test this from the userns/fscaps side of things. Do > you have a sequence of unshare/setcap/getcap commands that I can run on > a file inside of an eCryptfs mount to verify that the bug exists after > 7c03e2cda4a5 and then again to verify that this patch fixes the bug? You need two terminals: $ = <USER> # = root $ unshare -Um $ echo $$ <PID> # echo "0 1000 1" > uid_map # cp uid_map gid_map # echo 1000 2000 1 >> uid_map # echo 2000 3000 1 >> uid_map # cat uid_map > /proc/<PID>/uid_map # cat gid_map > /proc/<PID>/gid_map $ mkdir ~/tmp ~/mnt $ mount -t tmpfs tmpfs ~/tmp $ pwd /home/<USER> # nsenter -t <PID> -m # [setup ecryptfs on /home/<USER>/mnt using /home/<USER>/tmp] $ cd ~/mnt $ touch test $ /sbin/setcap -n 1000 cap_dac_override+eip test $ /sbin/getcap -n test test = cap_dac_override+eip [rootid=1000] Without the patch, I'm thinking that it will do a double translate and end up with rootid=2000 in the user namespace, but I might well have messed it up... Let me know how this goes. Thanks, Miklos