From 66bae937b968c8277c911c07f7cff26a5eef0523 Mon Sep 17 00:00:00 2001 From: Chen Lin Z Date: Mon, 10 Dec 2018 15:31:40 +0800 Subject: [PATCH] AOSP: Fix file offset overflow issue when file's size > 4G fs->blocksize is int(4 bytes), while data is off_t(8 bytes), 'data_blk = data & ~(fs->blocksize - 1)' will cause data_blk lose high 4 bytes of data if data > 4G and it'll cause file inconsistent when using -d option to populate ext4 image file. [ This was also fixed upstream via 1eec7413677e: "create_inode: fix copying large files". This commit is just to clean up whitespace/formatting issues. -- tytso ] Signed-off-by: Chen Lin Z Signed-off-by: Theodore Ts'o From AOSP commit: 999dd56f2586fadec7bfe846b8cb52c5e528248f --- misc/create_inode.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/misc/create_inode.c b/misc/create_inode.c index aa865a4..b288935 100644 --- a/misc/create_inode.c +++ b/misc/create_inode.c @@ -439,7 +439,7 @@ static errcode_t copy_file_chunk(ext2_filsys fs, int fd, ext2_file_t e2_file, continue; } err = ext2fs_file_llseek(e2_file, off + bpos, - EXT2_SEEK_SET, NULL); + EXT2_SEEK_SET, NULL); if (err) goto fail; while (blen > 0) { @@ -481,7 +481,8 @@ static errcode_t try_lseek_copy(ext2_filsys fs, int fd, struct stat *statbuf, return EXT2_ET_UNIMPLEMENTED; data_blk = data & ~(off_t)(fs->blocksize - 1); - hole_blk = (hole + (off_t)(fs->blocksize - 1)) & ~(off_t)(fs->blocksize - 1); + hole_blk = ((hole + (off_t)(fs->blocksize - 1)) & + ~(off_t)(fs->blocksize - 1)); err = copy_file_chunk(fs, fd, e2_file, data_blk, hole_blk, buf, zerobuf); if (err) -- 1.8.3.1