Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751394AbaJAEvg (ORCPT ); Wed, 1 Oct 2014 00:51:36 -0400 Received: from mail-pd0-f173.google.com ([209.85.192.173]:45398 "EHLO mail-pd0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750859AbaJAEvf (ORCPT ); Wed, 1 Oct 2014 00:51:35 -0400 From: Andy Lutomirski To: Thomas Gleixner , X86 ML , Ingo Molnar , "H. Peter Anvin" Cc: Sebastian Lackner , Anish Bhatt , "linux-kernel@vger.kernel.org" , Chuck Ebbert , Andy Lutomirski Subject: [PATCH v2 0/2] x86_64,entry: Clear NT on entry and speed up switch_to Date: Tue, 30 Sep 2014 21:51:26 -0700 Message-Id: X-Mailer: git-send-email 1.9.3 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Anish Bhatt noticed that user programs can set RFLAGS.NT before syscall or sysenter, and the kernel entry code doesn't filter out NT. This causes kernel C code and, depending on thread flags, the exit slow path to run with NT set. The former is a little bit scary (imagine calling into EFI with NT set), and the latter will fail with #GP and send a spurious SIGSEGV. One answer would be "don't do that". But the kernel can do better here. These patches filter NT on all kernel entries. For syscall (both bitnesses), this is free. For sysenter, it seems to cost very little (less than my ability to measure, although I didn't try that hard). Patch 2, which isn't tagged for -stable, speeds up context switches by avoiding saving and restoring flags, so this series should be a decent overall performance win. See: https://bugs.winehq.org/show_bug.cgi?id=33275 Changes from v1: - Spell stable@vger.kernel.org correctly - Tidy up changelog text - Actually commit an asm constraint fix in patch 2 (egads!) - Replace the unconditional popfq with a branch Andy Lutomirski (2): x86_64,entry: Filter RFLAGS.NT on entry from userspace x86_64: Don't save flags on context switch arch/x86/ia32/ia32entry.S | 12 ++++++++++++ arch/x86/include/asm/switch_to.h | 12 ++++++++---- arch/x86/kernel/cpu/common.c | 2 +- 3 files changed, 21 insertions(+), 5 deletions(-) -- 1.9.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/