From: Darrick J. Wong Date: Wed, 30 Jul 2025 17:23:24 +0000 (-0700) Subject: fuse2fs: fix block parameter truncation on 32-bit X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fheads%2Fnext;p=thirdparty%2Fe2fsprogs.git fuse2fs: fix block parameter truncation on 32-bit Use the blk64_t variants of the io channel read/write methods when we have to do partial block zeroing for hole punching because otherwise we corrupt large 64-bit filesystems on 32-bit fuse2fs due to integer truncation. Cc: linux-ext4@vger.kernel.org # v1.43 Fixes: 81cbf1ef4f5dab ("misc: add fuse2fs, a FUSE server for e2fsprogs") Signed-off-by: Darrick J. Wong Link: https://lore.kernel.org/r/20250730172324.GR2672022@frogsfrogsfrogs Signed-off-by: Theodore Ts'o --- diff --git a/misc/fuse2fs.c b/misc/fuse2fs.c index c6b1684f..4d42a634 100644 --- a/misc/fuse2fs.c +++ b/misc/fuse2fs.c @@ -4168,13 +4168,13 @@ static errcode_t clean_block_middle(struct fuse2fs *ff, ext2_ino_t ino, if (!blk || (retflags & BMAP_RET_UNINIT)) return 0; - err = io_channel_read_blk(fs->io, blk, 1, *buf); + err = io_channel_read_blk64(fs->io, blk, 1, *buf); if (err) return err; memset(*buf + residue, 0, len); - return io_channel_write_blk(fs->io, blk, 1, *buf); + return io_channel_write_blk64(fs->io, blk, 1, *buf); } static errcode_t clean_block_edge(struct fuse2fs *ff, ext2_ino_t ino, @@ -4202,7 +4202,7 @@ static errcode_t clean_block_edge(struct fuse2fs *ff, ext2_ino_t ino, if (err) return err; - err = io_channel_read_blk(fs->io, blk, 1, *buf); + err = io_channel_read_blk64(fs->io, blk, 1, *buf); if (err) return err; if (!blk || (retflags & BMAP_RET_UNINIT)) @@ -4213,7 +4213,7 @@ static errcode_t clean_block_edge(struct fuse2fs *ff, ext2_ino_t ino, else memset(*buf + residue, 0, fs->blocksize - residue); - return io_channel_write_blk(fs->io, blk, 1, *buf); + return io_channel_write_blk64(fs->io, blk, 1, *buf); } static int punch_helper(struct fuse_file_info *fp, int mode, off_t offset,