diff options
| author | Michael Bestas <mkbestas@lineageos.org> | 2021-10-18 18:22:55 +0300 |
|---|---|---|
| committer | Michael Bestas <mkbestas@lineageos.org> | 2021-10-18 18:22:55 +0300 |
| commit | 0e3b56cdb412e1bc868db2e7649fb6978269e196 (patch) | |
| tree | 8c7a562e32c15349815e6720076a12922f0d89dd /mm/memory.c | |
| parent | dea2d7ed9189653c985767477470773f6735be69 (diff) | |
| parent | bf687da3fdbe378ae33b7d4c6cbaa2dfa3993628 (diff) | |
Merge remote-tracking branch 'common/android-4.4-p' into lineage-18.1-caf-msm8998
# By Eric Dumazet (2) and others
# Via Greg Kroah-Hartman
* common/android-4.4-p:
Linux 4.4.289
perf/x86: Reset destroy callback on event init failure
scsi: virtio_scsi: Fix spelling mistake "Unsupport" -> "Unsupported"
scsi: ses: Fix unsigned comparison with less than zero
mac80211: Drop frames from invalid MAC address in ad-hoc mode
netfilter: ip6_tables: zero-initialize fragment offset
HID: apple: Fix logical maximum and usage maximum of Magic Keyboard JIS
mm: check VMA flags to avoid invalid PROT_NONE NUMA balancing
gup: document and work around "COW can break either way" issue
i40e: fix endless loop under rtnl
netlink: annotate data races around nlk->bound
ARM: imx6: disable the GIC CPU interface before calling stby-poweroff sequence
ptp_pch: Load module automatically if ID matches
net_sched: fix NULL deref in fifo_set_limit()
phy: mdio: fix memory leak
xtensa: call irqchip_init only when CONFIG_USE_OF is selected
nfsd4: Handle the NFSv4 READDIR 'dircount' hint being zero
USB: cdc-acm: fix break reporting
USB: cdc-acm: fix racy tty buffer accesses
Change-Id: I72428b366b3ed4931d8f8e8b38c7842ed48ead22
Diffstat (limited to 'mm/memory.c')
| -rw-r--r-- | mm/memory.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/mm/memory.c b/mm/memory.c index 2d020726ffa0..09a57fe6ae01 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -3210,9 +3210,6 @@ static int do_numa_page(struct mm_struct *mm, struct vm_area_struct *vma, bool was_writable = pte_write(pte); int flags = 0; - /* A PROT_NONE fault should not end up here */ - BUG_ON(!(vma->vm_flags & (VM_READ | VM_EXEC | VM_WRITE))); - /* * The "pte" at this point cannot be used safely without * validation through pte_unmap_same(). It's of NUMA type but @@ -3305,6 +3302,11 @@ static int wp_huge_pmd(struct mm_struct *mm, struct vm_area_struct *vma, return VM_FAULT_FALLBACK; } +static inline bool vma_is_accessible(struct vm_area_struct *vma) +{ + return vma->vm_flags & (VM_READ | VM_EXEC | VM_WRITE); +} + /* * These routines also need to handle stuff like marking pages dirty * and/or accessed for architectures that don't do it in hardware (most @@ -3351,7 +3353,7 @@ static int handle_pte_fault(struct mm_struct *mm, pte, pmd, flags, entry); } - if (pte_protnone(entry)) + if (pte_protnone(entry) && vma_is_accessible(vma)) return do_numa_page(mm, vma, address, entry, pte, pmd); ptl = pte_lockptr(mm, pmd); @@ -3426,7 +3428,7 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, if (pmd_trans_splitting(orig_pmd)) return 0; - if (pmd_protnone(orig_pmd)) + if (pmd_protnone(orig_pmd) && vma_is_accessible(vma)) return do_huge_pmd_numa_page(mm, vma, address, orig_pmd, pmd); |
