android_kernel_samsung_msm8976/mm
Linus Torvalds f1bcd09be5 mremap: properly flush TLB before releasing the page
commit eb66ae030829605d61fbef1909ce310e29f78821 upstream.

Jann Horn points out that our TLB flushing was subtly wrong for the
mremap() case.  What makes mremap() special is that we don't follow the
usual "add page to list of pages to be freed, then flush tlb, and then
free pages".  No, mremap() obviously just _moves_ the page from one page
table location to another.

That matters, because mremap() thus doesn't directly control the
lifetime of the moved page with a freelist: instead, the lifetime of the
page is controlled by the page table locking, that serializes access to
the entry.

As a result, we need to flush the TLB not just before releasing the lock
for the source location (to avoid any concurrent accesses to the entry),
but also before we release the destination page table lock (to avoid the
TLB being flushed after somebody else has already done something to that
page).

This also makes the whole "need_flush" logic unnecessary, since we now
always end up flushing the TLB for every valid entry.

Reported-and-tested-by: Jann Horn <jannh@google.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Tested-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[will: backport to 4.4 stable]
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
2019-07-27 21:53:28 +02:00
..
kasan kasan, module, vmalloc: rework shadow allocation for modules 2015-05-04 14:03:58 -07:00
Kconfig Import T813XXS2BRC2 kernel source changes 2018-05-26 00:39:42 +02:00
Kconfig.debug defconfig: 8994: enable CONFIG_DEBUG_SLUB_PANIC_ON 2014-10-21 14:00:18 -07:00
Makefile BACKPORT: mm/zpool: implement common zpool api to zbud/zsmalloc 2016-05-18 14:35:03 +05:30
backing-dev.c
balloon_compaction.c
bootmem.c
bounce.c
cleancache.c
compaction.c Import latest Samsung release 2017-04-18 03:43:52 +02:00
debug-pagealloc.c mm/debug-pagealloc.c: print page physical address for 2015-08-23 23:19:22 -07:00
dmapool.c
early_ioremap.c
fadvise.c mm/fadvise.c: fix signed overflow UBSAN complaint 2019-07-27 21:51:37 +02:00
failslab.c
filemap.c mm, fs: check for fatal signals in do_generic_file_read() 2019-07-27 21:43:51 +02:00
filemap_xip.c
fremap.c
frontswap.c mm: frontswap: invalidate expired data on a dup-store failure 2014-12-16 09:09:41 -08:00
highmem.c
huge_memory.c mremap: properly flush TLB before releasing the page 2019-07-27 21:53:28 +02:00
hugetlb.c mm: hugetlbfs: skip shared VMAs when unmapping private pages to satisfy a fault 2015-10-22 14:37:50 -07:00
hugetlb_cgroup.c
hwpoison-inject.c
init-mm.c
internal.h mm: Enhance per process reclaim to consider shared pages 2015-04-16 10:14:27 -07:00
interval_tree.c
kmemcheck.c
kmemleak-test.c
kmemleak.c mm: kmemleak: allow safe memory scanning during kmemleak disabling 2015-06-22 10:47:32 +05:30
ksm.c mm,ksm: fix endless looping in allocating memory when ksm enable 2019-07-27 21:42:51 +02:00
maccess.c
madvise.c mm/madvise.c: fix madvise() infinite loop under special circumstances 2019-07-27 21:45:21 +02:00
memblock.c
memcontrol.c UPSTREAM: memcg: Only free spare array when readers are done 2016-05-18 14:36:06 +05:30
memory-failure.c This is the 3.10.98 stable release 2017-04-18 17:17:24 +02:00
memory.c mm/memory.c: check return value of ioremap_prot 2019-07-27 21:51:23 +02:00
memory_hotplug.c mm/memory_hotplug.c: check start_pfn in test_pages_in_a_zone() 2019-07-27 21:43:51 +02:00
mempolicy.c mm/mempolicy.c: avoid use uninitialized preferred_node 2019-07-27 21:49:27 +02:00
mempool.c
memtest.c memtest: use phys_addr_t for physical addresses 2015-04-01 09:27:43 -07:00
migrate.c Sanitize 'move_pages()' permission checks 2019-07-27 21:44:50 +02:00
mincore.c
mlock.c mm: reorder can_do_mlock to fix audit denial 2015-09-16 18:20:13 +05:30
mm_init.c
mmap.c mm: Reduce Samsung's verbose logging when mapping memory 2019-07-27 21:53:25 +02:00
mmu_context.c
mmu_notifier.c
mmzone.c
mprotect.c mm/mprotect: add a cond_resched() inside change_pmd_range() 2019-07-27 21:46:25 +02:00
mremap.c mremap: properly flush TLB before releasing the page 2019-07-27 21:53:28 +02:00
msync.c
nobootmem.c
nommu.c This is the 3.10.73 stable release 2015-04-24 18:14:57 -07:00
oom_kill.c This is the 3.10.67 stable release 2015-04-24 18:04:40 -07:00
page-writeback.c Import latest Samsung release 2017-04-18 03:43:52 +02:00
page_alloc.c mm, page_alloc: do not break __GFP_THISNODE by zonelist reset 2019-07-27 21:52:50 +02:00
page_cgroup.c cgroup/kmemleak: add kmemleak_free() for cgroup deallocations. 2014-11-14 08:47:59 -08:00
page_io.c Import latest Samsung release 2017-04-18 03:43:52 +02:00
page_isolation.c mm: add zone counter for cma pages 2019-07-27 21:51:09 +02:00
pageowner.c
pagewalk.c pagewalk: improve vma handling 2019-07-27 21:51:51 +02:00
percpu-km.c
percpu-vm.c
percpu.c Revert "percpu: free percpu allocation info for uniprocessor system" 2014-11-14 08:47:53 -08:00
pgtable-generic.c
process_reclaim.c lowmemorykiller: Introduce sysfs node for ALMK and PPR adj threshold 2016-07-06 23:07:02 -07:00
process_vm_access.c ptrace: use fsuid, fsgid, effective creds for fs access checks 2016-02-25 11:57:47 -08:00
quicklist.c
readahead.c readahead: make context readahead more conservative 2019-07-27 21:49:54 +02:00
rmap.c mm: Enhance per process reclaim to consider shared pages 2015-04-16 10:14:27 -07:00
shmem.c mm: shmem.c: Correctly annotate new inodes for lockdep 2019-07-27 21:53:13 +02:00
showmem.c Import latest Samsung release 2017-04-18 03:43:52 +02:00
slab.c cpuset: PF_SPREAD_PAGE and PF_SPREAD_SLAB should be atomic flags 2019-07-27 21:44:59 +02:00
slab.h
slab_common.c mm: slub: add kernel address sanitizer support for slub allocator 2015-05-04 14:03:56 -07:00
slob.c
slub.c mm: slub: add kernel address sanitizer support for slub allocator 2015-05-04 14:03:56 -07:00
sparse-vmemmap.c
sparse.c
swap.c
swap_state.c Import latest Samsung release 2017-04-18 03:43:52 +02:00
swapfile.c swapfile: fix memory corruption via malformed swapfile 2019-07-27 21:42:14 +02:00
truncate.c mm: Remove false WARN_ON from pagecache_isize_extended() 2014-11-14 08:48:00 -08:00
util.c Import latest Samsung release 2017-04-18 03:43:52 +02:00
vmalloc.c Import latest Samsung release 2017-04-18 03:43:52 +02:00
vmpressure.c mm: vmpressure: fix sending wrong events on underflow 2019-07-27 21:43:56 +02:00
vmscan.c mm: fix the NULL mapping case in __isolate_lru_page() 2019-07-27 21:49:37 +02:00
vmstat.c Import latest Samsung release 2017-04-18 03:43:52 +02:00
zbud.c Import latest Samsung release 2017-04-18 03:43:52 +02:00
zpool.c Import latest Samsung release 2017-04-18 03:43:52 +02:00
zsmalloc.c Import latest Samsung release 2017-04-18 03:43:52 +02:00
zswap.c Import latest Samsung release 2017-04-18 03:43:52 +02:00