forked from Minki/linux
ia64: mark special ia64 memory areas anonymous
Commitbfd40eaff5
("mm: fix vma_is_anonymous() false-positives") made newly allocated vma's have a dummy vm_ops field so that they wouldn't be mistaken for anonymous mappings, and if you wanted an anonymous vma you had to explicitly say so by calling "vma_set_anonymous()" on it. However, it missed the two special vmas that ia64 processes have: the register backing store and the NaT page. So they wouldn't actually act like anonymous ranges, and page faults on them caused a SIGBUS rather than the creation of a new anon page in them. That obviously will make any ia64 binary very unhappy indeed, and the boot fails early. Fixes:bfd40eaff5
("mm: fix vma_is_anonymous() false-positives") Reported-by: Tony Luck <tony.luck@intel.com> Cc: Kirill Shutemov <kirill.shutemov@linux.intel.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Dmitry Vyukov <dvyukov@google.com> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: John Stultz <john.stultz@linaro.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
37b71411b7
commit
ebad825cdd
@ -116,6 +116,7 @@ ia64_init_addr_space (void)
|
|||||||
*/
|
*/
|
||||||
vma = vm_area_alloc(current->mm);
|
vma = vm_area_alloc(current->mm);
|
||||||
if (vma) {
|
if (vma) {
|
||||||
|
vma_set_anonymous(vma);
|
||||||
vma->vm_start = current->thread.rbs_bot & PAGE_MASK;
|
vma->vm_start = current->thread.rbs_bot & PAGE_MASK;
|
||||||
vma->vm_end = vma->vm_start + PAGE_SIZE;
|
vma->vm_end = vma->vm_start + PAGE_SIZE;
|
||||||
vma->vm_flags = VM_DATA_DEFAULT_FLAGS|VM_GROWSUP|VM_ACCOUNT;
|
vma->vm_flags = VM_DATA_DEFAULT_FLAGS|VM_GROWSUP|VM_ACCOUNT;
|
||||||
@ -133,6 +134,7 @@ ia64_init_addr_space (void)
|
|||||||
if (!(current->personality & MMAP_PAGE_ZERO)) {
|
if (!(current->personality & MMAP_PAGE_ZERO)) {
|
||||||
vma = vm_area_alloc(current->mm);
|
vma = vm_area_alloc(current->mm);
|
||||||
if (vma) {
|
if (vma) {
|
||||||
|
vma_set_anonymous(vma);
|
||||||
vma->vm_end = PAGE_SIZE;
|
vma->vm_end = PAGE_SIZE;
|
||||||
vma->vm_page_prot = __pgprot(pgprot_val(PAGE_READONLY) | _PAGE_MA_NAT);
|
vma->vm_page_prot = __pgprot(pgprot_val(PAGE_READONLY) | _PAGE_MA_NAT);
|
||||||
vma->vm_flags = VM_READ | VM_MAYREAD | VM_IO |
|
vma->vm_flags = VM_READ | VM_MAYREAD | VM_IO |
|
||||||
|
Loading…
Reference in New Issue
Block a user