New pentium bug workaround - please test..

Linus Torvalds (torvalds@transmeta.com)
Tue, 18 Nov 1997 17:43:32 -0800 (PST)


Hi all,
I know you're all probably fed up with this by now, but there are some
really good news: there is a potential other workaround for the Pentium
"lock cmpxchg8b" bug that is not only a lot simpler than the old one, but
also gets rid of all the nasty corner-cases - and is faster.

The new workaround actually depends on the Intel bug not only forgetting
to clear the "lock" state of the instruction, it also forgets to clear the
fact that the instruction tries to do a read-modify-write cycle. So it
will not only do the IDT access as a locked cycle, it will do it as a
locked cycle that requires write permissions..

Now, that implies that we can actually _keep_ the IDT mapped, and instead
of marking it not present we can mark it read-only. Which is not a problem
for normal faults, because normal faults will only read from the IDT
anyway (including other illegal instruction faults).

It's only the specific bug-fault that will try to do a write access to
the IDT, and thus it is _only_ when the bug is triggered that we'll get
the page protection fault. This also implies that we can do the check for
the bug in the non-critical part of the page fault handler (ie in the case
where we have already determined that it wasn't a good page fault), and
that we don't need to play any games with updating eip etc - we can just
call the illegal instruction handler directly.

In short, the bug suddenly becomes pretty much a non-issue as far as
Linux is concerned.

Anyway, this approach still needs to be debugged, but I'm told by intel
that it should indeed work, and I have a patch for people to try out.
Right now the patch is only for 2.1.x (relative to 2.1.65, in fact), but
once it has turned out to be a good patch we can very easily back-port it
into 2.0.x too - just to make sure that all the corner cases are squashed.

Linus

-----
begin 664 pre-66.gz
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
G^.PG9><?$H2"=[S$!\9;D9"X&MC.\=SM]*CR5N7#7ZD<JHW#6@``
`
end