Re: Crash report #1 with SADISTIC_KMALLOC/no modules

Morten Welinder (terra@diku.dk)
Sun, 7 Apr 1996 11:57:56 +0200


[...]

> 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