> The "Code:" part disassembles to
>
> repz movsl %ds:(%esi),%es:(%edi)
> andl $0x3,%ebx
> movl %ebx,%ecx
> repz movsb %ds:(%esi),%es:(%edi)
> popl %es
> pushl $0x0
> movl 0x20(%esp,1),%esi
[...]
> Ok, so far so good. HOWEVER, that instruction then traps with:
>
> Unable to handle kernel paging request at virtual address 00000004
>
>even though virtual address 0x00000004 never even enters the picture. In
>short, that particular instruction should under no circumstances be able
>to trap with that address.
This is not quite true. I can see at least two possibilities where
the instruction could validly generate the page fault:
1. The page directory or some page table contains bogus information.
This includes entries not flushed correctly.
2. A non-sequential event (i.e., an interrupt) hides the real cause.
3. Something trashes [part of] the register dump before it gets
dumped.
I don't really believe in 2 and 3, but 1 could generate some really
nasty-to-find, long-hiding, "non-deterministic" crashes.
If I remember things right then CR2 contains a physical address, not
a linear one. Something could also have gone wrong with the
translation before the printing.
Morten