On Wed, 1 May 2019 12:03:52 -0700 Linus Torvalds torvalds@linux-foundation.org wrote:
On Wed, May 1, 2019 at 6:11 AM Peter Zijlstra peterz@infradead.org wrote:
Here goes, compile tested only...
Ugh, two different threads. This has the same bug (same source) as the one Steven posted:
--- a/arch/x86/entry/entry_32.S +++ b/arch/x86/entry/entry_32.S @@ -1479,6 +1479,13 @@ ENTRY(int3) ASM_CLAC pushl $-1 # mark this as an int
testl $SEGMENT_RPL_MASK, PT_CS(%esp)
jnz .Lfrom_usermode_no_gap
.rept 6
pushl 5*4(%esp)
.endr
+.Lfrom_usermode_no_gap:
This will corrupt things horribly if you still use vm86 mode. Checking CS RPL is simply not correct.
I never tested the 32 bit version of this. And we could just not implement it (I don't think there's live kernel patching for it either).
But this doesn't make it any worse than my version, because under the full testing of my patch with the trampolines, I would easily crash the 32 bit version. That was one reason I made my last patch only support 64 bit.
Under light load, 32 bit works, but when I stress it (running perf and ftrace together) it blows up. Could be an NMI issue.
-- Steve