kernel_samsung_a53x/mm
Linus Torvalds 53cef2d952 mm: avoid leaving partial pfn mappings around in error case
commit 79a61cc3fc0466ad2b7b89618a6157785f0293b3 upstream.

As Jann points out, PFN mappings are special, because unlike normal
memory mappings, there is no lifetime information associated with the
mapping - it is just a raw mapping of PFNs with no reference counting of
a 'struct page'.

That's all very much intentional, but it does mean that it's easy to
mess up the cleanup in case of errors.  Yes, a failed mmap() will always
eventually clean up any partial mappings, but without any explicit
lifetime in the page table mapping itself, it's very easy to do the
error handling in the wrong order.

In particular, it's easy to mistakenly free the physical backing store
before the page tables are actually cleaned up and (temporarily) have
stale dangling PTE entries.

To make this situation less error-prone, just make sure that any partial
pfn mapping is torn down early, before any other error handling.

Reported-and-tested-by: Jann Horn <jannh@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Jason Gunthorpe <jgg@ziepe.ca>
Cc: Simona Vetter <simona.vetter@ffwll.ch>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Harshvardhan Jha <harshvardhan.j.jha@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-11-23 23:22:05 +01:00
..
damon Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kasan Revert "kasan: print the original fault addr when access invalid shadow" 2024-11-18 11:06:01 +01:00
kfence Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sec_mm Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
backing-dev.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
balloon_compaction.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cleancache.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cma.c mm/cma: use nth_page() in place of direct struct page manipulation 2024-11-18 11:43:25 +01:00
cma.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cma_debug.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cma_sysfs.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
compaction.c mm: Disable proactive compaction by default 2024-11-19 17:53:38 +01:00
debug.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
debug_page_ref.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
debug_vm_pgtable.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dmapool.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
early_ioremap.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fadvise.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
failslab.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
filemap.c mm/lru: revise the comments of lru_lock 2024-11-19 17:58:24 +01:00
frame_vector.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
frontswap.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
gup.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
gup_benchmark.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
highmem.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
hmm.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
hpa.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
huge_memory.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
hugetlb.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
hugetlb_cgroup.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
hwpoison-inject.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
init-mm.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
internal.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
interval_tree.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
io_record.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ioremap.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kconfig zsmalloc: backport from 5994eabf3bbb 2024-11-19 17:44:14 +01:00
Kconfig.debug Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
khugepaged.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kmemleak.c mm: kmemleak: Don't die when memory allocation fails 2024-11-19 17:44:35 +01:00
ksm.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kzerod.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
list_lru.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
maccess.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
madvise.c Revert "fs: add file and path permissions helpers" 2024-11-19 13:30:21 +01:00
Makefile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mapping_dirty_helpers.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
memblock.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
memcontrol.c memcg_write_event_control(): fix a user-triggerable oops 2024-11-23 23:20:43 +01:00
memfd.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
memory-failure.c mm/memory-failure: fix an incorrect use of tail pages 2024-11-19 09:22:41 +01:00
memory.c mm: avoid leaving partial pfn mappings around in error case 2024-11-23 23:22:05 +01:00
memory_hotplug.c mm/memory_hotplug: use pfn math in place of direct struct page manipulation 2024-11-18 11:43:25 +01:00
mempolicy.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mempool.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
memremap.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
memtest.c memtest: use {READ,WRITE}_ONCE in memory scanning 2024-11-19 09:22:36 +01:00
migrate.c mm/migrate: set swap entry values of THP tail pages properly. 2024-11-19 09:22:41 +01:00
mincore.c Revert "fs: add file and path permissions helpers" 2024-11-19 13:30:21 +01:00
mlock.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mm_init.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mmap.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mmu_gather.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mmu_notifier.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mmzone.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mprotect.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mremap.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
msync.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
nommu.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
oom_kill.c mm: oom_kill: Reduce some verbose logging 2024-11-19 17:44:31 +01:00
page-writeback.c Revert "kernel: sysctl: add init protection to common mm-related nodes" 2024-11-19 18:13:49 +01:00
page_alloc.c mm: Disable watermark boosting by default 2024-11-19 17:59:15 +01:00
page_counter.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
page_ext.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
page_idle.c mm: page_idle_get_page() does not need lru_lock 2024-11-19 17:58:44 +01:00
page_io.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
page_isolation.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
page_owner.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
page_pinner.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
page_poison.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
page_reporting.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
page_reporting.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
page_vma_mapped.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pagewalk.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
percpu-internal.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
percpu-km.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
percpu-stats.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
percpu-vm.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
percpu.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pgalloc-track.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pgtable-generic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
process_vm_access.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ptdump.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
readahead.c vfs: fix readahead(2) on block devices 2024-11-18 11:42:46 +01:00
rmap.c mm/rmap: stop store reordering issue on page->mapping 2024-11-19 17:59:04 +01:00
rodata_test.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
shmem.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
shuffle.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
shuffle.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
slab.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
slab.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
slab_common.c mm: krealloc: consider spare memory for __GFP_ZERO 2024-11-23 23:21:44 +01:00
slob.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
slub.c slub: Optimized SLUB Memory Allocator 2024-11-19 17:44:40 +01:00
sparse-vmemmap.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sparse.c mm/sparsemem: fix race in accessing memory_section->usage 2024-11-18 12:13:06 +01:00
swap.c mm/lru: move lock into lru_note_cost 2024-11-19 17:58:50 +01:00
swap_cgroup.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
swap_slots.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
swap_state.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
swapfile.c mm/swapfile: skip HugeTLB pages for unuse_vma 2024-11-23 23:21:54 +01:00
truncate.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
usercopy.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
userfaultfd.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
util.c mm: only enforce minimum stack gap size if it's sensible 2024-11-23 23:21:34 +01:00
vmacache.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
vmalloc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
vmpressure.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
vmscan.c mm/vmscan: remove unnecessary lruvec adding 2024-11-19 17:58:57 +01:00
vmstat.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
workingset.c mm/lru: move lock into lru_note_cost 2024-11-19 17:58:50 +01:00
z3fold.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
zbud.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
zpool.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
zsmalloc.c zsmalloc: backport from 5994eabf3bbb 2024-11-19 17:44:14 +01:00
zswap.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00