Skip to content

x86_64,entry: Clear NT on entry and speed up switch_to

Andy Lutomirski lkml stable 4 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v4 Latest2 patches 9 repliesIn review
  2. v32 patches 13 repliesSuperseded
  3. v22 patches 13 repliesSuperseded
Earlier versions · 1
VersionPostedPatchesRepliesStatus
v12 patches13 repliesSuperseded

Changes in v4 from the cover letter

- Added a better description of the impact in patch 1

Patches in v4 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/2x86_64,entry: Filter RFLAGS.NT on entry from userspacearch/x86/ia32/ia32entry.S arch/x86/kernel/cpu/common.c+18 -23 replies
2/2x86_64: Don't save flags on context switcharch/x86/include/asm/switch_to.h+8 -40 replies

Reviews trailers per patch

None of the 2 patches has a Reviewed-by or Acked-by.

PatchRusty Russell
SeriesT-b
1/2
2/2

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v4 thread

Cover letter [PATCH v4 0/2] x86_64,entry: Clear NT on entry and speed up switch_to

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

Note to bikeshedders: I have no desire to go crazy micro-optimizing the sysenter path. :) This version seems to be good enough (and should be a performance *increase* for most workloads).

Changes from v3:
- Added a better description of the impact in patch 1

Changes from v2:
- Move the flag fixup out of line
- Fix a CFI buglet

Changes from v1:
- Spell [email protected] 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        | 18 +++++++++++++++++-
 arch/x86/include/asm/switch_to.h | 12 ++++++++----
 arch/x86/kernel/cpu/common.c     |  2 +-
 3 files changed, 26 insertions(+), 6 deletions(-)
Signature · 1 line
1.9.3