Create a guard area between VMAs, to detect memory corruption.

Signed-off-by: Yu-cheng Yu <yu-cheng...@intel.com>
---
 include/linux/mm.h | 30 ++++++++++++++++++++----------
 1 file changed, 20 insertions(+), 10 deletions(-)

diff --git a/include/linux/mm.h b/include/linux/mm.h
index c4cc07baccda..3a823bdae09d 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -2443,24 +2443,34 @@ static inline struct vm_area_struct * 
find_vma_intersection(struct mm_struct * m
 static inline unsigned long vm_start_gap(struct vm_area_struct *vma)
 {
        unsigned long vm_start = vma->vm_start;
+       unsigned long gap;
+
+       if (vma->vm_flags & VM_GROWSDOWN)
+               gap = stack_guard_gap;
+       else
+               gap = PAGE_SIZE;
+
+       vm_start -= gap;
+       if (vm_start > vma->vm_start)
+               vm_start = 0;
 
-       if (vma->vm_flags & VM_GROWSDOWN) {
-               vm_start -= stack_guard_gap;
-               if (vm_start > vma->vm_start)
-                       vm_start = 0;
-       }
        return vm_start;
 }
 
 static inline unsigned long vm_end_gap(struct vm_area_struct *vma)
 {
        unsigned long vm_end = vma->vm_end;
+       unsigned long gap;
+
+       if (vma->vm_flags & VM_GROWSUP)
+               gap = stack_guard_gap;
+       else
+               gap = PAGE_SIZE;
+
+       vm_end += gap;
+       if (vm_end < vma->vm_end)
+               vm_end = -PAGE_SIZE;
 
-       if (vma->vm_flags & VM_GROWSUP) {
-               vm_end += stack_guard_gap;
-               if (vm_end < vma->vm_end)
-                       vm_end = -PAGE_SIZE;
-       }
        return vm_end;
 }
 
-- 
2.17.1

Reply via email to