| From d3c51c55cb9274dd43c156f1f26b5eb4d5f2d58c Mon Sep 17 00:00:00 2001 |
| From: Andreas Gruenbacher <agruenba@redhat.com> |
| Date: Mon, 21 Jun 2021 22:28:50 +0200 |
| Subject: gfs2: Fix underflow in gfs2_page_mkwrite |
| |
| From: Andreas Gruenbacher <agruenba@redhat.com> |
| |
| commit d3c51c55cb9274dd43c156f1f26b5eb4d5f2d58c upstream. |
| |
| On filesystems with a block size smaller than PAGE_SIZE and non-empty |
| files smaller then PAGE_SIZE, gfs2_page_mkwrite could end up allocating |
| excess blocks beyond the end of the file, similar to fallocate. This |
| doesn't make sense; fix it. |
| |
| Reported-by: Bob Peterson <rpeterso@redhat.com> |
| Fixes: 184b4e60853d ("gfs2: Fix end-of-file handling in gfs2_page_mkwrite") |
| Cc: stable@vger.kernel.org # v5.5+ |
| Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/gfs2/file.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/fs/gfs2/file.c |
| +++ b/fs/gfs2/file.c |
| @@ -474,8 +474,8 @@ static vm_fault_t gfs2_page_mkwrite(stru |
| file_update_time(vmf->vma->vm_file); |
| |
| /* page is wholly or partially inside EOF */ |
| - if (offset > size - PAGE_SIZE) |
| - length = offset_in_page(size); |
| + if (size - offset < PAGE_SIZE) |
| + length = size - offset; |
| else |
| length = PAGE_SIZE; |
| |