bug#77597: listxattr() should return ENOTSUP for sysfs / tmpfs entries, not 0
Pádraig Brady <[email protected]>
| Newsgroups | gmane.comp.gnu.core-utils.bugs |
|---|---|
| Message-ID | <c0a1f475-b973-40a8-a7cc-6947791af38a__37934.6821968042$1748000377$gmane$org@draigBrady.com> |
On 23/04/2025 13:22, Pádraig Brady wrote:
> Older coreutils was less efficient and always called getxattr("security.selinux"),
> and thus shows the SELinux context as expected:
>
> $ coreutils-9.3/src/ls -lZd /run/initramfs
> drwxr-xr-x. 3 root root system_u:object_r:tmpfs_t:s0 60 Apr 19 14:52 /run/initramfs
> $ coreutils-9.3/src/ls -lZd /sys/block
> drwxr-xr-x. 2 root root system_u:object_r:sysfs_t:s0 0 Apr 23 12:54 /sys/block
>
> However newer coreutils is more efficient, and does not call getxattr()
> if listxattr() returns 0 indicating that there are no xattrs.
>
> $ coreutils-9.7/src/ls -lZd /run/initramfs
> drwxr-xr-x 3 root root ? 60 Apr 19 14:52 /run/initramfs
> $ coreutils-9.7/src/ls -lZd /sys/block
> drwxr-xr-x 2 root root ? 0 Apr 23 12:54 /sys/block
>
> I also noticed the same issue with the exa utility for example.
> For coreutils to maintain efficient processing and to fix the issue centrally,
> it would be more correct for listxattr() to return ENOTSUP,
> in which case ls will try the getxattr() call and operate as expected.
> Otherwise I can't see a way for coreutils to be both efficient and always correct.
>
> I'm currently testing on kernel 6.14.2-300.fc42.x86_64
FYI this should be addressed with:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8b0ba61d
cheers,
Pádraig