On Fri, 23 Aug 2024 11:41:28 +0100
Pádraig Brady <P@draigBrady.com> wrote:
On 23/08/2024 08:14, Natanael Copa wrote:
With coreutils 9.5 stat -f -c %i returns wrong value with musl libc.
$ docker run --rm -it -v /tmp:/tmp alpine:3.20 sh -c "apk add --quiet coreutils && stat --version
&& stat -f -c %i /tmp && busybox stat -f -c %i /tmp"
stat (GNU coreutils) 9.5
Copyright (C) 2024 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Michael Meskes.
4dc59e8900000000
4dc59e89680d9b7c
Coreutils returns 4dc59e8900000000 instead of the expected 4dc59e89680d9b7c.
With 9.4 this works as expected:
$ docker run --rm -it -v /tmp:/tmp alpine:3.19 sh -c "apk add --quiet coreutils && stat --version
&& stat -f -c %i /tmp && busybox stat -f -c %i /tmp"
stat (GNU coreutils) 9.4
Copyright (C) 2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Michael Meskes.
4dc59e89680d9b7c
4dc59e89680d9b7c
Downstream report: https://gitlab.alpinelinux.org/alpine/aports/-/issues/16386
I can't see what might have changed on the coreutils side with a quick look.
It would help eliminate cases if you provided strace output from 9.4 and 9.5
I think the difference is that with 9.4 it ends up using statfs(2), and
with 9.5 it ends up using statvfs(3).
musl only uses 32 bits of the returned 64 bits from statfs(2) to match the
POSIX interface.
https://git.musl-libc.org/cgit/musl/tree/src/stat/statvfs.c?id=dd1e63c3638d5f9afb857fccf6ce1415ca5f1b8b#n39
I believe they do so to have consistent fsid on 32 bit and 64 bit architectures.