| From ded551fd7f2c606ad13903a8d9fb0d2bb182d821 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 30 Apr 2021 08:50:31 -0700 |
| Subject: afs: check function return |
| |
| From: Tom Rix <trix@redhat.com> |
| |
| [ Upstream commit afe6949862f77bcc14fa16ad7938a04e84586d6a ] |
| |
| Static analysis reports this problem |
| |
| write.c:773:29: warning: Assigned value is garbage or undefined |
| mapping->writeback_index = next; |
| ^ ~~~~ |
| The call to afs_writepages_region() can return without setting |
| next. So check the function return before using next. |
| |
| Changes: |
| ver #2: |
| - Need to fix the range_cyclic case also[1]. |
| |
| Fixes: e87b03f5830e ("afs: Prepare for use of THPs") |
| Signed-off-by: Tom Rix <trix@redhat.com> |
| Signed-off-by: David Howells <dhowells@redhat.com> |
| Reviewed-by: Marc Dionne <marc.dionne@auristor.com> |
| cc: linux-afs@lists.infradead.org |
| Link: https://lore.kernel.org/r/20210430155031.3287870-1-trix@redhat.com |
| Link: https://lore.kernel.org/r/CAB9dFdvHsLsw7CMnB+4cgciWDSqVjuij4mH3TaXnHQB8sz5rHw@mail.gmail.com/ [1] |
| Link: https://lore.kernel.org/r/162609464716.3133237.10354897554363093252.stgit@warthog.procyon.org.uk/ # v1 |
| Link: https://lore.kernel.org/r/162610727640.3408253.8687445613469681311.stgit@warthog.procyon.org.uk/ # v2 |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| fs/afs/write.c | 16 +++++++++++----- |
| 1 file changed, 11 insertions(+), 5 deletions(-) |
| |
| diff --git a/fs/afs/write.c b/fs/afs/write.c |
| index 3104b62c2082..1ed62e0ccfe5 100644 |
| --- a/fs/afs/write.c |
| +++ b/fs/afs/write.c |
| @@ -771,13 +771,19 @@ int afs_writepages(struct address_space *mapping, |
| if (wbc->range_cyclic) { |
| start = mapping->writeback_index * PAGE_SIZE; |
| ret = afs_writepages_region(mapping, wbc, start, LLONG_MAX, &next); |
| - if (start > 0 && wbc->nr_to_write > 0 && ret == 0) |
| - ret = afs_writepages_region(mapping, wbc, 0, start, |
| - &next); |
| - mapping->writeback_index = next / PAGE_SIZE; |
| + if (ret == 0) { |
| + mapping->writeback_index = next / PAGE_SIZE; |
| + if (start > 0 && wbc->nr_to_write > 0) { |
| + ret = afs_writepages_region(mapping, wbc, 0, |
| + start, &next); |
| + if (ret == 0) |
| + mapping->writeback_index = |
| + next / PAGE_SIZE; |
| + } |
| + } |
| } else if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) { |
| ret = afs_writepages_region(mapping, wbc, 0, LLONG_MAX, &next); |
| - if (wbc->nr_to_write > 0) |
| + if (wbc->nr_to_write > 0 && ret == 0) |
| mapping->writeback_index = next; |
| } else { |
| ret = afs_writepages_region(mapping, wbc, |
| -- |
| 2.30.2 |
| |