• Miklos Szeredi's avatar
    fuse: ioctl: translate ENOSYS · 02c0cab8
    Miklos Szeredi authored
    Overlayfs may fail to complete updates when a filesystem lacks
    fileattr/xattr syscall support and responds with an ENOSYS error code,
    resulting in an unexpected "Function not implemented" error.
    
    This bug may occur with FUSE filesystems, such as davfs2.
    
    Steps to reproduce:
    
      # install davfs2, e.g., apk add davfs2
      mkdir /test mkdir /test/lower /test/upper /test/work /test/mnt
      yes '' | mount -t davfs -o ro http://some-web-dav-server/path \
        /test/lower
      mount -t overlay -o upperdir=/test/upper,lowerdir=/test/lower \
        -o workdir=/test/work overlay /test/mnt
    
      # when "some-file" exists in the lowerdir, this fails with "Function
      # not implemented", with dmesg showing "overlayfs: failed to retrieve
      # lower fileattr (/some-file, err=-38)"
      touch /test/mnt/some-file
    
    The underlying cause of this regresion is actually in FUSE, which fails to
    translate the ENOSYS error code returned by userspace filesystem (which
    means that the ioctl operation is not supported) to ENOTTY.
    Reported-by: default avatarChristian Kohlschütter <christian@kohlschutter.com>
    Fixes: 72db8211 ("ovl: copy up sync/noatime fileattr flags")
    Fixes: 59efec7b ("fuse: implement ioctl support")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
    02c0cab8
ioctl.c 12.7 KB