From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: linux-mm@kvack.org
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: mprotect pgprot handling weirdness
Date: Tue, 06 Apr 2010 15:09:26 +1000 [thread overview]
Message-ID: <1270530566.13812.28.camel@pasglop> (raw)
Hi folks !
While looking at untangling a bit some of the mess with vm_flags and
pgprot (*), I notices a few things I can't quite explain... they may ..
or may not be bugs, but I though it was worth mentioning:
- In mprotect_fixup() :
/*
* vm_flags and vm_page_prot are protected by the mmap_sem
* held in write mode.
*/
vma->vm_flags = newflags;
vma->vm_page_prot = pgprot_modify(vma->vm_page_prot,
vm_get_page_prot(newflags));
if (vma_wants_writenotify(vma)) {
vma->vm_page_prot = vm_get_page_prot(newflags & ~VM_SHARED);
dirty_accountable = 1;
}
So as you can see above, we take great care (using pgprot_modify) to avoid
blasting away some PAT related flags on x86 (no other arch implements
pgprot_modify() today).... but if we hit vma_wants_writenotify(), then
we unconditionally override the entire vma->vm_page_prot field with some
new prot bits born of the new vm_flags. That sounds odd...
- in sys_mprotect:
newflags = vm_flags | (vma->vm_flags & ~(VM_READ | VM_WRITE | VM_EXEC));
Do I read correctly that this means we cannot -remove- any flag than
VM_READ, VM_WRITE or VM_EXEC ? That means that we cannot remove PROT_SAO
which gets turned into VM_SAO on powerpc ... Yet another reason to take
those arch specific mapping attributes out of the vm_flags.
(*) Right now it's near impossible to add arch specific PROT_* bits to
mmap/mprotect for fancy things like cachability attributes, or other
nifty things like reverse-endian mappings that we have on some embedded
platforms, I'm investigating ways to better separate vm_page_prot from
vm_flags so some PROT_* bits can go straight to the former without
having to be mirrored in some way in the later.
Cheers,
Ben.
WARNING: multiple messages have this Message-ID (diff)
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: linux-mm@kvack.org
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: mprotect pgprot handling weirdness
Date: Tue, 06 Apr 2010 15:09:26 +1000 [thread overview]
Message-ID: <1270530566.13812.28.camel@pasglop> (raw)
Hi folks !
While looking at untangling a bit some of the mess with vm_flags and
pgprot (*), I notices a few things I can't quite explain... they may ..
or may not be bugs, but I though it was worth mentioning:
- In mprotect_fixup() :
/*
* vm_flags and vm_page_prot are protected by the mmap_sem
* held in write mode.
*/
vma->vm_flags = newflags;
vma->vm_page_prot = pgprot_modify(vma->vm_page_prot,
vm_get_page_prot(newflags));
if (vma_wants_writenotify(vma)) {
vma->vm_page_prot = vm_get_page_prot(newflags & ~VM_SHARED);
dirty_accountable = 1;
}
So as you can see above, we take great care (using pgprot_modify) to avoid
blasting away some PAT related flags on x86 (no other arch implements
pgprot_modify() today).... but if we hit vma_wants_writenotify(), then
we unconditionally override the entire vma->vm_page_prot field with some
new prot bits born of the new vm_flags. That sounds odd...
- in sys_mprotect:
newflags = vm_flags | (vma->vm_flags & ~(VM_READ | VM_WRITE | VM_EXEC));
Do I read correctly that this means we cannot -remove- any flag than
VM_READ, VM_WRITE or VM_EXEC ? That means that we cannot remove PROT_SAO
which gets turned into VM_SAO on powerpc ... Yet another reason to take
those arch specific mapping attributes out of the vm_flags.
(*) Right now it's near impossible to add arch specific PROT_* bits to
mmap/mprotect for fancy things like cachability attributes, or other
nifty things like reverse-endian mappings that we have on some embedded
platforms, I'm investigating ways to better separate vm_page_prot from
vm_flags so some PROT_* bits can go straight to the former without
having to be mirrored in some way in the later.
Cheers,
Ben.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next reply other threads:[~2010-04-06 5:09 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-06 5:09 Benjamin Herrenschmidt [this message]
2010-04-06 5:09 ` mprotect pgprot handling weirdness Benjamin Herrenschmidt
2010-04-06 5:32 ` Benjamin Herrenschmidt
2010-04-06 5:32 ` Benjamin Herrenschmidt
2010-04-06 5:43 ` Benjamin Herrenschmidt
2010-04-06 5:43 ` Benjamin Herrenschmidt
2010-04-06 5:52 ` KOSAKI Motohiro
2010-04-06 5:52 ` KOSAKI Motohiro
2010-04-06 6:07 ` Arch specific mmap attributes (Was: mprotect pgprot handling weirdness) Benjamin Herrenschmidt
2010-04-06 6:07 ` Benjamin Herrenschmidt
2010-04-06 6:24 ` KOSAKI Motohiro
2010-04-06 6:24 ` KOSAKI Motohiro
2010-04-06 7:30 ` Benjamin Herrenschmidt
2010-04-06 7:30 ` Benjamin Herrenschmidt
2010-04-06 10:26 ` KOSAKI Motohiro
2010-04-06 10:26 ` KOSAKI Motohiro
2010-04-06 22:15 ` Benjamin Herrenschmidt
2010-04-06 22:15 ` Benjamin Herrenschmidt
2010-04-07 6:03 ` KOSAKI Motohiro
2010-04-07 6:03 ` KOSAKI Motohiro
2010-04-07 7:03 ` Arch specific mmap attributes David Miller
2010-04-07 7:03 ` David Miller
2010-04-07 7:14 ` KOSAKI Motohiro
2010-04-07 7:14 ` KOSAKI Motohiro
2010-04-07 7:18 ` David Miller
2010-04-07 7:18 ` David Miller
2010-04-07 9:00 ` Benjamin Herrenschmidt
2010-04-07 9:00 ` Benjamin Herrenschmidt
2010-04-07 8:58 ` Benjamin Herrenschmidt
2010-04-07 8:58 ` Benjamin Herrenschmidt
2010-04-07 8:56 ` Arch specific mmap attributes (Was: mprotect pgprot handling weirdness) Benjamin Herrenschmidt
2010-04-07 8:56 ` Benjamin Herrenschmidt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1270530566.13812.28.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.