diff --git a/include/linux/mm.h b/include/linux/mm.h index a17bd3a6413f..3a031ad7ed28 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -834,6 +835,8 @@ static inline void vm_flags_reset(struct vm_area_struct *vma, vm_flags_t flags) { vma_assert_write_locked(vma); + /* Preserve padding flags */ + flags = vma_pad_fixup_flags(vma, flags); vm_flags_init(vma, flags); } @@ -841,6 +844,8 @@ static inline void vm_flags_reset_once(struct vm_area_struct *vma, vm_flags_t flags) { vma_assert_write_locked(vma); + /* Preserve padding flags */ + flags = vma_pad_fixup_flags(vma, flags); WRITE_ONCE(ACCESS_PRIVATE(vma, __vm_flags), flags); } diff --git a/mm/mlock.c b/mm/mlock.c index 4f029298b09e..4296d742014d 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -459,7 +459,7 @@ success: if ((newflags & VM_LOCKED) && (oldflags & VM_LOCKED)) { /* No work to do, and mlocking twice would be wrong */ vma_start_write(vma); - vm_flags_reset(vma, vma_pad_fixup_flags(vma, newflags)); + vm_flags_reset(vma, newflags); } else { mlock_vma_pages_range(vma, start, end, newflags); } diff --git a/mm/mprotect.c b/mm/mprotect.c index 044c17ffaecf..774ff1fd443c 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c @@ -633,7 +633,7 @@ success: * held in write mode. */ vma_start_write(vma); - vm_flags_reset(vma, vma_pad_fixup_flags(vma, newflags)); + vm_flags_reset(vma, newflags); /* * We want to check manually if we can change individual PTEs writable * if we can't do that automatically for all PTEs in a mapping. For