From 0cdfe6a0dc9046a0c7a8d985fcc8ecf124e60af9 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Thu, 24 Aug 2017 13:27:38 -0400 Subject: [PATCH] add patch ext4_seek_hole-return-ENXIO-for-negative-offsets --- ext4_seek_hole-return-ENXIO-for-negative-offsets | 38 ++++++++++++++++++++++++ series | 1 + 2 files changed, 39 insertions(+) create mode 100644 ext4_seek_hole-return-ENXIO-for-negative-offsets diff --git a/ext4_seek_hole-return-ENXIO-for-negative-offsets b/ext4_seek_hole-return-ENXIO-for-negative-offsets new file mode 100644 index 00000000..d83488ed --- /dev/null +++ b/ext4_seek_hole-return-ENXIO-for-negative-offsets @@ -0,0 +1,38 @@ +ext4: in ext4_seek_{hole,data}, return -ENXIO for negative offsets + +From: "Darrick J. Wong" + +In the ext4 implementations of SEEK_HOLE and SEEK_DATA, make sure we +return -ENXIO for negative offsets instead of banging around inside +the extent code and returning -EFSCORRUPTED. + +Reported-by: Mateusz S +Signed-off-by: Darrick J. Wong +Cc: stable@vger.kernel.org # 4.6 +--- + fs/ext4/file.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/fs/ext4/file.c b/fs/ext4/file.c +index 02ce7e7..923e765 100644 +--- a/fs/ext4/file.c ++++ b/fs/ext4/file.c +@@ -576,7 +576,7 @@ static loff_t ext4_seek_data(struct file *file, loff_t offset, loff_t maxsize) + inode_lock(inode); + + isize = i_size_read(inode); +- if (offset >= isize) { ++ if (offset < 0 || offset >= isize) { + inode_unlock(inode); + return -ENXIO; + } +@@ -639,7 +639,7 @@ static loff_t ext4_seek_hole(struct file *file, loff_t offset, loff_t maxsize) + inode_lock(inode); + + isize = i_size_read(inode); +- if (offset >= isize) { ++ if (offset < 0 || offset >= isize) { + inode_unlock(inode); + return -ENXIO; + } + diff --git a/series b/series index e75b45de..331ea07c 100644 --- a/series +++ b/series @@ -3,6 +3,7 @@ do-not-unnecessarily-allocate-buffer-in-recently_deleted cleanup-goto-next-group reduce-lock-contention-in-ext4_new_inode +ext4_seek_hole-return-ENXIO-for-negative-offsets #################################################### # unstable patches -- 2.11.4.GIT