Messages in this thread Patch in this message | | | From | "Reese Faucette" <> | Subject | [PATCH] overflow check calculation in mm/mmap.c is incorrect linux-3.12.38 | Date | Wed, 29 Apr 2015 22:14:19 -0700 |
| |
When checking for overflow, the code in mm/mmap.c compares the first byte *after* the end of mapped region to the start of the region instead of the last byte of the mapped region. This prevents mapping a region which abuts the end of physical space, as mmap() incorrectly rejects the region with -EOVERFLOW, because pgoff + (len >> PAGE_SHIFT) will be 0, which is < pgoff. -reese
Reese Faucette Cisco Systems, Inc.
==================================================== --- mm/mmap.c +++ mm/mmap.c @@ -1241,7 +1241,7 @@ return -ENOMEM;
/* offset overflow? */ - if ((pgoff + (len >> PAGE_SHIFT)) < pgoff) + if ((pgoff + (len >> PAGE_SHIFT) - 1) < pgoff) return -EOVERFLOW;
/* Too many mappings? */
| |