mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-01 03:54:02 +00:00
do_wp_page: fix regression with execute in place
Fix do_wp_page for VM_MIXEDMAP mappings.
In the case where pfn_valid returns 0 for a pfn at the beginning of
do_wp_page and the mapping is not shared writable, the code branches to
label `gotten:' with old_page == NULL.
In case the vma is locked (vma->vm_flags & VM_LOCKED), lock_page,
clear_page_mlock, and unlock_page try to access the old_page.
This patch checks whether old_page is valid before it is dereferenced.
The regression was introduced by "mlock: mlocked pages are unevictable"
(commit b291f00039
).
Signed-off-by: Carsten Otte <cotte@de.ibm.com>
Cc: Nick Piggin <npiggin@suse.de>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: <stable@kernel.org> [2.6.28.x]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
777c6c5f1f
commit
ab92661d5d
1 changed files with 1 additions and 1 deletions
|
@ -1999,7 +1999,7 @@ gotten:
|
||||||
* Don't let another task, with possibly unlocked vma,
|
* Don't let another task, with possibly unlocked vma,
|
||||||
* keep the mlocked page.
|
* keep the mlocked page.
|
||||||
*/
|
*/
|
||||||
if (vma->vm_flags & VM_LOCKED) {
|
if ((vma->vm_flags & VM_LOCKED) && old_page) {
|
||||||
lock_page(old_page); /* for LRU manipulation */
|
lock_page(old_page); /* for LRU manipulation */
|
||||||
clear_page_mlock(old_page);
|
clear_page_mlock(old_page);
|
||||||
unlock_page(old_page);
|
unlock_page(old_page);
|
||||||
|
|
Loading…
Add table
Reference in a new issue