The upstream commit: 1bd8d6cd3e41: ext4: in ext4_seek_{hole,data}, return -ENXIO for negative offsets has not landed in 4.9 yet, probably because it only recently hit upstream (during the 4.14 merge window). The upstream commit will automatically apply for 4.9 and newer kernels. However, it will not cherry pick cleanly into the 3.18, 4.1, and 4.4 kernels. For the stable kernels will need this adjusted backport. - Ted >From 7fa8b8b96e69f1ad1b2eb2ee107275e2d38a8769 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" <darrick.wong@xxxxxxxxxx> Date: Thu, 24 Aug 2017 13:22:06 -0400 Subject: [PATCH] ext4: in ext4_seek_{hole,data}, return -ENXIO for negative offsets [ Upstream commit 1bd8d6cd3e413d64e543ec3e69ff43e75a1cf1ea ] 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 <muttdini@xxxxxxxxx> Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> Signed-off-by: Theodore Ts'o <tytso@xxxxxxx> Cc: stable@xxxxxxxxxxxxxxx # 3.18 --- 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 45ef9975caec..a8b1749d79a8 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c @@ -559,7 +559,7 @@ static loff_t ext4_seek_data(struct file *file, loff_t offset, loff_t maxsize) mutex_lock(&inode->i_mutex); isize = i_size_read(inode); - if (offset >= isize) { + if (offset < 0 || offset >= isize) { mutex_unlock(&inode->i_mutex); return -ENXIO; } @@ -632,7 +632,7 @@ static loff_t ext4_seek_hole(struct file *file, loff_t offset, loff_t maxsize) mutex_lock(&inode->i_mutex); isize = i_size_read(inode); - if (offset >= isize) { + if (offset < 0 || offset >= isize) { mutex_unlock(&inode->i_mutex); return -ENXIO; } -- 2.11.0.rc0.7.gbe5a750