diff options
author | Darrick J. Wong <darrick.wong@oracle.com> | 2017-08-24 13:22:06 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2017-08-24 13:22:06 -0400 |
commit | 1bd8d6cd3e413d64e543ec3e69ff43e75a1cf1ea (patch) | |
tree | 51616e94cb1964210e88b6005cab48e4b10f12b2 /fs/ext4/file.c | |
parent | 901ed070df3c2c19e3083a734eafc82599fe991b (diff) |
ext4: in ext4_seek_{hole,data}, return -ENXIO for negative offsets
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@gmail.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Cc: stable@vger.kernel.org # 4.6
Diffstat (limited to 'fs/ext4/file.c')
-rw-r--r-- | fs/ext4/file.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/ext4/file.c b/fs/ext4/file.c index 0d7cf0cc9b87..86ea1d92839a 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c | |||
@@ -595,7 +595,7 @@ static loff_t ext4_seek_data(struct file *file, loff_t offset, loff_t maxsize) | |||
595 | inode_lock(inode); | 595 | inode_lock(inode); |
596 | 596 | ||
597 | isize = i_size_read(inode); | 597 | isize = i_size_read(inode); |
598 | if (offset >= isize) { | 598 | if (offset < 0 || offset >= isize) { |
599 | inode_unlock(inode); | 599 | inode_unlock(inode); |
600 | return -ENXIO; | 600 | return -ENXIO; |
601 | } | 601 | } |
@@ -658,7 +658,7 @@ static loff_t ext4_seek_hole(struct file *file, loff_t offset, loff_t maxsize) | |||
658 | inode_lock(inode); | 658 | inode_lock(inode); |
659 | 659 | ||
660 | isize = i_size_read(inode); | 660 | isize = i_size_read(inode); |
661 | if (offset >= isize) { | 661 | if (offset < 0 || offset >= isize) { |
662 | inode_unlock(inode); | 662 | inode_unlock(inode); |
663 | return -ENXIO; | 663 | return -ENXIO; |
664 | } | 664 | } |