Borislav Petkov 638666
From: Andy Lutomirski <luto@kernel.org>
Borislav Petkov 638666
Date: Sun, 28 May 2017 10:00:11 -0700
Borislav Petkov 638666
Subject: x86/mm: Change the leave_mm() condition for local TLB flushes
Borislav Petkov 638666
Git-commit: 59f537c1dea04287165bb11407921e095250dc80
Borislav Petkov 638666
Patch-mainline: v4.13-rc1
Borislav Petkov 638666
References: bsc#1068032 CVE-2017-5754
Borislav Petkov 638666
Borislav Petkov 638666
On a remote TLB flush, we leave_mm() if we're TLBSTATE_LAZY.  For a
Borislav Petkov 638666
local flush_tlb_mm_range(), we leave_mm() if !current->mm.  These
Borislav Petkov 638666
are approximately the same condition -- the scheduler sets lazy TLB
Borislav Petkov 638666
mode when switching to a thread with no mm.
Borislav Petkov 638666
Borislav Petkov 638666
I'm about to merge the local and remote flush code, but for ease of
Borislav Petkov 638666
verifying and bisecting the patch, I want the local and remote flush
Borislav Petkov 638666
behavior to match first.  This patch changes the local code to match
Borislav Petkov 638666
the remote code.
Borislav Petkov 638666
Borislav Petkov 638666
Signed-off-by: Andy Lutomirski <luto@kernel.org>
Borislav Petkov 638666
Acked-by: Rik van Riel <riel@redhat.com>
Borislav Petkov 638666
Cc: Andrew Morton <akpm@linux-foundation.org>
Borislav Petkov 638666
Cc: Arjan van de Ven <arjan@linux.intel.com>
Borislav Petkov 638666
Cc: Borislav Petkov <bpetkov@suse.de>
Borislav Petkov 638666
Cc: Dave Hansen <dave.hansen@intel.com>
Borislav Petkov 638666
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Borislav Petkov 638666
Cc: Mel Gorman <mgorman@suse.de>
Borislav Petkov 638666
Cc: Michal Hocko <mhocko@suse.com>
Borislav Petkov 638666
Cc: Nadav Amit <nadav.amit@gmail.com>
Borislav Petkov 638666
Cc: Nadav Amit <namit@vmware.com>
Borislav Petkov 638666
Cc: Peter Zijlstra <peterz@infradead.org>
Borislav Petkov 638666
Cc: Rik van Riel <riel@redhat.com>
Borislav Petkov 638666
Cc: Thomas Gleixner <tglx@linutronix.de>
Borislav Petkov 638666
Cc: linux-mm@kvack.org
Borislav Petkov 638666
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Borislav Petkov 638666
Acked-by: Borislav Petkov <bp@suse.de>
Borislav Petkov 638666
---
Borislav Petkov 638666
 arch/x86/mm/tlb.c |    2 +-
Borislav Petkov 638666
 1 file changed, 1 insertion(+), 1 deletion(-)
Borislav Petkov 638666
Borislav Petkov 638666
--- a/arch/x86/mm/tlb.c
Borislav Petkov 638666
+++ b/arch/x86/mm/tlb.c
Borislav Petkov 638666
@@ -311,7 +311,7 @@ void flush_tlb_mm_range(struct mm_struct
Borislav Petkov 638666
 		goto out;
Borislav Petkov 638666
 	}
Borislav Petkov 638666
 
Borislav Petkov 638666
-	if (!current->mm) {
Borislav Petkov 638666
+	if (this_cpu_read(cpu_tlbstate.state) != TLBSTATE_OK) {
Borislav Petkov 638666
 		leave_mm(smp_processor_id());
Borislav Petkov 638666
 
Borislav Petkov 638666
 		/* Synchronize with switch_mm. */