Hey,
coreutils 9.6 appears to have a regression in `ls(1)` for SELinux-aware
builds. `ls -Z` fails to obtain the security context for certain
filesystem objects (e.g. `/sys`). Example to reproduce on Gentoo with
refpolicy:
rsandhu@graphite ~ $ ls -alZ /run/ | grep '?'
drwxr-xr-x 3 root root ?
60 Apr 5 16:38 credentials
drwxr-xr-x 3 root root ?
80 Apr 2 16:30 initramfs
drwxr-xr-x 2 root root ?
40 Apr 2 16:23 modprobe.d
rsandhu@graphite ~ $ getfilecon /run/{credentials,initramfs,modprobe.d}
/run/credentials system_u:object_r:tmpfs_t:s0
/run/initramfs system_u:object_r:tmpfs_t:s0
/run/modprobe.d system_u:object_r:tmpfs_t:s0
Since 432ad8738387f1b2e80e883dc7080df3afabe, coreutils attempts to list
all attributes instead of specifically getting the "security.selinux"
xattr via `getxattr(2)` (which is what libselinux internally calls). As
seen below, the security context xattr only shows when specifically
requesting it by passing the arguments -n 'security.selinux' to the
command line:
rsandhu@graphite ~ $ getfattr -d -m '' /run/credentials
<no output>
rsandhu@graphite ~ $ getfattr -n 'security.selinux' /run/credentials
getfattr: Removing leading '/' from absolute path names
# file: run/credentials
security.selinux="system_u:object_r:tmpfs_t:s0"
Reverting this commit[1], which no longer handles this case, fixes the
regression.
case.
More information is available in the related post on the SELinux mailing
list[2].
Thanks,
Rahul
[1]
https://git.savannah.gnu.org/cgit/coreutils.git/commit/?id=4ce432ad8738387f1b2e80e883dc7080df3afabe
[2]
https://lore.kernel.org/selinux/CAFqZXNtF8wDyQajPCdGn=ioawx4y77ph0ecfcqcuuj+t87f...@mail.gmail.com/