[PATCH 0/6] tlb: Fix access and (soft-)dirty bit management

From: Will Deacon
Date: Fri Nov 20 2020 - 09:36:06 EST


Hi all,

This series attempts to fix some issues relating to our access and
(soft-)dirty bit management relating to TLB invalidation. It's a bit all
over the place because I kept running into new issues as I was trying to
figure it out.

The first patch fixes a crash we've seen in practice. The other patches
are all addressing things that I found by code inspection and I would
_really_ appreciate others having a look. In particular, what can go
wrong in practice if a CPU has a stale, writable entry in the TLB for a
pte which is !pte_write()? It feels intuitively bad, but I couldn't find
anywhere that would explode (the CoW path looks alright, for example).

Cheers,

Will

Cc: Catalin Marinas <catalin.marinas@xxxxxxx>
Cc: Yu Zhao <yuzhao@xxxxxxxxxx>
Cc: Minchan Kim <minchan@xxxxxxxxxx>
Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx
Cc: Anshuman Khandual <anshuman.khandual@xxxxxxx>
Cc: linux-mm@xxxxxxxxx
Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx

--->8

Will Deacon (6):
arm64: pgtable: Fix pte_accessible()
arm64: pgtable: Ensure dirty bit is preserved across pte_wrprotect()
tlb: mmu_gather: Remove unused start/end arguments from
tlb_finish_mmu()
mm: proc: Invalidate TLB after clearing soft-dirty page state
tlb: mmu_gather: Introduce tlb_gather_mmu_fullmm()
mm: proc: Avoid fullmm flush for young/dirty bit toggling

arch/arm64/include/asm/pgtable.h | 31 +++++++++++++++----------------
arch/ia64/include/asm/tlb.h | 2 +-
arch/x86/kernel/ldt.c | 2 +-
fs/exec.c | 2 +-
fs/proc/task_mmu.c | 22 +++++++++++++---------
include/asm-generic/tlb.h | 6 ++++--
include/linux/mm_types.h | 4 ++--
mm/hugetlb.c | 2 +-
mm/madvise.c | 6 +++---
mm/memory.c | 4 ++--
mm/mmap.c | 6 +++---
mm/mmu_gather.c | 21 +++++++++++++++------
mm/oom_kill.c | 4 ++--
13 files changed, 63 insertions(+), 49 deletions(-)

--
2.29.2.454.gaff20da3a2-goog