From 8a86bbb19714c135aef07095d0b3c1d7e4f7a155 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Thu, 12 Dec 2013 13:19:46 -0500 Subject: [PATCH] libext2fs: fail fileio write if we can't allocate a block If we're using ext2fs_file_write() to write to a hole in a file, ensure that we can actually allocate the block before updating i_size. In other words, don't update i_size and don't return success if we hit an error while allocating space. Signed-off-by: Darrick J. Wong Signed-off-by: "Theodore Ts'o" --- lib/ext2fs/fileio.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/ext2fs/fileio.c b/lib/ext2fs/fileio.c index d092e656b..03bdf863c 100644 --- a/lib/ext2fs/fileio.c +++ b/lib/ext2fs/fileio.c @@ -297,6 +297,20 @@ errcode_t ext2fs_file_write(ext2_file_t file, const void *buf, if (retval) goto fail; + /* + * OK, the physical block hasn't been allocated yet. + * Allocate it. + */ + if (!file->physblock) { + retval = ext2fs_bmap2(fs, file->ino, &file->inode, + BMAP_BUFFER, + file->ino ? BMAP_ALLOC : 0, + file->blockno, 0, + &file->physblock); + if (retval) + goto fail; + } + file->flags |= EXT2_FILE_BUF_DIRTY; memcpy(file->buf+start, ptr, c); file->pos += c; -- 2.39.2