BY ROBERT R. COLLINS
P54C Erratum 33
PROBLEM: The WRMSR and RDMSR instructions allow writing and reading of special MSRs (Model Specific Registers) based on the index number placed in ECX. The architecture was specified to reject accesses to illegal MSRs by generating the fault GP(0) if WRMSR or RDMSR is executed with an illegal index. However, negative indices, all of which are illegal, do not trigger GP(0).
IMPLICATIONS: If RDMSR is used with negative indices, undefined values will be read into EAX. If WRMSR is used with negative indices, undefined processor behavior may result.
WORKAROUND: Do not use illegal indices with WRMSR and RDMSR.
The above information is a direct quote from the Pentium Processor Specification Update (errata). There's just one problem with it...it's not true. While some of the information is true, other parts of it are patently false.
It's true that reading and writing illegal MSRs is supposed to generate a GP fault. But Intel left a back-door in the architecture to read and write MSRs that they didn't think anybody would discover. It wasn't long before the hacker community discovered this back door, and began publishing the secrets of these hidden MSRs. One such article appears at this web site, entitled "Pentium Model-Specific Registers and What They Reveal" by Ralf Brown.
As Ralf was researching these hidden MSRs, he contacted Christian Ludloff and myself for more information. Ralf had already discovered that MSRs with negative indices were mirror images of their non-negative counterparts. There was just one problem: the non-negative counterparts weren't contiguous (some MSR indices that were undefined and generated the expected GP(0)), but the negative indices were all contiguous and all produced return values. Ralf expected that these undefined MSR indices were a back-door into MSRs that Intel wanted to use for their own purposes. Ralf was correct.
Within a short period of time, I discovered that MSR 8000001D was an undocumented MSR that mapped to the Probe Mode Control Register. Ralf discovered a few others relating to the Floating Point Unit. He wrote up a paper, and published it to the World Wide Web.
Now, the ball was in Intel's court. They had just published Erratum 33 which described these illegal MSRs as having an undefined effect on the Pentium processor's behavior. Clearly, the thought this issue was important enough to document it as Erratum 33. But unfortunately, they didn't think it was important enough to tell the truth.