• Arnd Bergmann's avatar
    parisc: use generic sys_fanotify_mark implementation · 403f17a3
    Arnd Bergmann authored
    The sys_fanotify_mark() syscall on parisc uses the reverse word order
    for the two halves of the 64-bit argument compared to all syscalls on
    all 32-bit architectures. As far as I can tell, the problem is that
    the function arguments on parisc are sorted backwards (26, 25, 24, 23,
    ...) compared to everyone else, so the calling conventions of using an
    even/odd register pair in native word order result in the lower word
    coming first in function arguments, matching the expected behavior
    on little-endian architectures. The system call conventions however
    ended up matching what the other 32-bit architectures do.
    
    A glibc cleanup in 2020 changed the userspace behavior in a way that
    handles all architectures consistently, but this inadvertently broke
    parisc32 by changing to the same method as everyone else.
    
    The change made it into glibc-2.35 and subsequently into debian 12
    (bookworm), which is the latest stable release. This means we
    need to choose between reverting the glibc change or changing the
    kernel to match it again, but either hange will leave some systems
    broken.
    
    Pick the option that is more likely to help current and future
    users and change the kernel to match current glibc. This also
    means the behavior is now consistent across architectures, but
    it breaks running new kernels with old glibc builds before 2.35.
    
    Link: https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=d150181d73d9
    Link: https://git.kernel.org/pub/scm/linux/kernel/git/history/history.git/commit/arch/parisc/kernel/sys_parisc.c?h=57b1dfbd5b4a39d
    Cc: Adhemerval Zanella <adhemerval.zanella@linaro.org>
    Tested-by: default avatarHelge Deller <deller@gmx.de>
    Acked-by: default avatarHelge Deller <deller@gmx.de>
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    ---
    I found this through code inspection, please double-check to make
    sure I got the bug and the fix right.
    
    The alternative is to fix this by reverting glibc back to the
    unusual behavior.
    403f17a3
sys_parisc32.c 749 Bytes