Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG]: large file failure with overlayfs #125

Open
lukokr-aarch64 opened this issue Jan 17, 2024 · 1 comment
Open

[BUG]: large file failure with overlayfs #125

lukokr-aarch64 opened this issue Jan 17, 2024 · 1 comment

Comments

@lukokr-aarch64
Copy link

Hi, thanks for squashfuse!

I have stumbled across a potential bug when using multiple squashfs mounts as layers in overlayfs.

Here is the rough dir layout:

lower1 [squashfuse]
lower2 [squashfuse]
upper
work
mnt

This stack is then mounted using rootless overlay. What I have found is overwriting a large >2GB file can result in an error:

line 3: test.file: Value too large for defined data type

I have used the following script to reproduce this:

#!/bin/bash


mkdir -p large_squash1 large_squash2
pushd large_squash1
yes large_squash1 | head -c 4GB > test.file
popd

pushd large_squash2
yes large_squash2 | head -c 4GB > test.file
popd

rm -f large1.squashfs large2.squashfs
mksquashfs large_squash1 large1.squashfs -all-root
mksquashfs large_squash2 large2.squashfs -all-root


unshare -mr bash -c "$(tail -n +21 "$0" || true)" "$0" "$@"
exit $?

# Unshared payload starts here.
set -ux
WORKDIR=/tmp/sf_repro

mount_cleanup() {
	umount --verbose -l "${WORKDIR}/mnt"
	fusermount -uz ${WORKDIR}/lower
}
trap 'mount_cleanup' EXIT

# requires an empty squashfs to demo empty.squashfs
rm -rf $WORKDIR/upper
mkdir -p $WORKDIR/{lower1,lower2,upper,work,mnt}

./squashfuse large1.squashfs $WORKDIR/lower1
./squashfuse large2.squashfs $WORKDIR/lower2

# mount overlay
mount \
  -t overlay \
  overlay \
  -o lowerdir=${WORKDIR}/lower2:${WORKDIR}/lower1,upperdir=${WORKDIR}/upper,workdir=${WORKDIR}/work\
  "${WORKDIR}/mnt"

pushd $WORKDIR/mnt
stat test.file
tail test.file
yes overlay | head -c 4GB > test.file # This will fail
echo $?
stat test.file
tail test.file

popd

I am using unshare here but you should be able to see this mounting with sudo. I have built latest squashfuse (c41a22a) and seen this with both squashfuse and squashfuse_ll.

My env:

Ubuntu 22.04.3 LTS
fuse3 version: 3.10.5-1build1
kernel: 5.15.0-89-generic

I am not sure if this is a bug in the overlayfs stack, fuse or squashfuse. But I cannot reproduce this behaviour when using directories directly in overlayfs. Another odd thing I noticed is that getconf FILESIZEBITS . returns 32 for squashfuse mounts, which I wonder if overlayfs uses in some way.

@lukokr-aarch64
Copy link
Author

Just an update, I have found archivemount has the same bug. So the issue is more likely in FUSE/overlay combination.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant