Messages in this thread Patch in this message |  | | From | Steven Price <> | Subject | [PATCH v17 14/23] mm: pagewalk: fix termination condition in walk_pte_range() | Date | Wed, 18 Dec 2019 16:23:53 +0000 |
| |
If walk_pte_range() is called with a 'end' argument that is beyond the last page of memory (e.g. ~0UL) then the comparison between 'addr' and 'end' will always fail and the loop will be infinite. Instead change the comparison to >= while accounting for overflow.
Signed-off-by: Steven Price <steven.price@arm.com> --- mm/pagewalk.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mm/pagewalk.c b/mm/pagewalk.c index 4b5ee92ba079..6732fc7ac4c8 100644 --- a/mm/pagewalk.c +++ b/mm/pagewalk.c @@ -14,9 +14,9 @@ static int walk_pte_range_inner(pte_t *pte, unsigned long addr, err = ops->pte_entry(pte, addr, addr + PAGE_SIZE, walk); if (err) break; - addr += PAGE_SIZE; - if (addr == end) + if (addr >= end - PAGE_SIZE) break; + addr += PAGE_SIZE; pte++; } return err; -- 2.20.1
|  |