• Nick Bowler's avatar
    xfs: Fix bulkstat compat ioctls on x32 userspace. · 68cb344c
    Nick Bowler authored
    [ Upstream commit 7ca860e3 ]
    
    The bulkstat family of ioctls are problematic on x32, because there is
    a mixup of native 32-bit and 64-bit conventions.  The xfs_fsop_bulkreq
    struct contains pointers and 32-bit integers so that matches the native
    32-bit layout, and that means the ioctl implementation goes into the
    regular compat path on x32.
    
    However, the 'ubuffer' member of that struct in turn refers to either
    struct xfs_inogrp or xfs_bstat (or an array of these).  On x32, those
    structures match the native 64-bit layout.  The compat implementation
    writes out the 32-bit version of these structures.  This is not the
    expected format for x32 userspace, causing problems.
    
    Fortunately the functions which actually output these xfs_inogrp and
    xfs_bstat structures have an easy way to select which output format
    is required, so we just need a little tweak to select the right format
    on x32.
    Signed-off-by: default avatarNick Bowler <nbowler@draconx.ca>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    68cb344c
xfs_ioctl32.c 18.3 KB