From: Stas Sergeev <stssppnn@yahoo.com>
To: linux-kernel@vger.kernel.org
Subject: Oops in 2.2.20, 100% reproduceable and fully tracked
Date: Tue, 11 Dec 2001 20:41:45 +0300 [thread overview]
Message-ID: <01121121200600.00906@localhost.localdomain> (raw)
Hello.
When I am trying to start one weird program under dosemu, I always get an Oops.
I have tracked this Oops down to a line of a source code in the kernel, see
below.
At first, the Oops itself:
---
ksymoops 2.4.3 on i686 2.2.20. Options used
-V (default)
-k /proc/ksyms (default)
-l /proc/modules (default)
-o /lib/modules/2.2.20/ (default)
-m /boot/System.map (specified)
Dec 2 21:04:05 localhost kernel: Unable to handle kernel paging request at virtual address 000078c3
Dec 2 21:04:05 localhost kernel: current->tss.cr3 = 0ad2f000, %cr3 = 0ad2f000
Dec 2 21:04:05 localhost kernel: *pde = 0b802067
Dec 2 21:04:05 localhost kernel: Oops: 0003
Dec 2 21:04:05 localhost kernel: CPU: 0
Dec 2 21:04:05 localhost kernel: EIP: 0010:[handle_vm86_fault+1149/2212]
Dec 2 21:04:05 localhost kernel: EFLAGS: 00010206
Dec 2 21:04:05 localhost kernel: eax: 00000009 ebx: 00003013 ecx: 00000020 edx: 00000021
Dec 2 21:04:05 localhost kernel: esi: 000000f3 edi: 000077d0 ebp: 000c39e0 esp: cad31ea8
Dec 2 21:04:05 localhost kernel: ds: 0018 es: 0018 ss: 0018
Dec 2 21:04:05 localhost kernel: Process xdos (pid: 872, process nr: 57, stackpage=cad31000)
Dec 2 21:04:05 localhost kernel: Stack: 000077d0 000000f4 00003013 000c39e0 00002827 cad31f00 00000000 c010a8cc
Dec 2 21:04:05 localhost kernel: 00009fff 00000000 00000000 cad30000 cad30000 00002827 c010a90f cad31f00
Dec 2 21:04:05 localhost kernel: 00000000 cad30000 00000000 c010a05d cad31f00 00000000 00000001 00000005
Dec 2 21:04:05 localhost kernel: Call Trace: [do_general_protection+0/116] [do_general_protection+67/116] [error_code+53/64] [system_call+52/56]
Dec 2 21:04:06 localhost kernel: Code: 88 7c 37 00 66 4e 88 5c 37 00 68 9d eb 1b c0 e8 3f 8b 00 00
Using defaults from ksymoops -t elf32-i386 -a i386
Code; 00000000 Before first symbol
00000000 <_EIP>:
Code; 00000000 Before first symbol
0: 88 7c 37 00 mov %bh,0x0(%edi,%esi,1)
Code; 00000004 Before first symbol
4: 66 4e dec %si
Code; 00000006 Before first symbol
6: 88 5c 37 00 mov %bl,0x0(%edi,%esi,1)
Code; 0000000a Before first symbol
a: 68 9d eb 1b c0 push $0xc01beb9d
Code; 0000000e Before first symbol
f: e8 3f 8b 00 00 call 8b53 <_EIP+0x8b53> 00008b52 Before first symbol
---
The faulting code is here:
arch/i386/kernel/vm86.c:341:
---
#define pushw(base, ptr, val) \
__asm__ __volatile__( \
"decw %w0\n\t" \
"movb %h2,0(%1,%0)\n\t" \ <-- fault is HERE!
"decw %w0\n\t" \
"movb %b2,0(%1,%0)" \
: "=r" (ptr) \
: "r" (base), "q" (val), "0" (ptr))
---
It is executed here, when it GPFs:
vm86.c:509:
---
case 0x9c:
SP(regs) -= 2;
IP(regs)++;
pushw(ssp, sp, get_vflags(regs)); <--handle_vm86_fault+1149/2212
VM86_FAULT_RETURN;
---
The registers:
ebx contains 0x3013. This is the value returned by get_vflags(regs).
edi=0x77d0 and esi=0xf3 contains dosemu's ss and sp.
So virtual flags are going to be moved to ss:sp to simulate pushf.
This all seems OK to me and I don't understand why the code
mov %bh,0x0(%edi,%esi,1)
can raise GPF with such values in regs.
So, I have collected all the info I ever could from this Oops, but I still
don't see a bug. I hope someone can help me.
Any ideas such as how this code (atleast theoretically) can raise GPF?
Any suggestions such as how can I collect more info on this subject?
I am pretty shure I can reproduce this Oops at any kernel, atleast at any 2.2.x,
but currently I am using 2.2.20.
Thanks for any advice.
next reply other threads:[~2001-12-11 18:52 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-12-11 17:41 Stas Sergeev [this message]
2001-12-11 19:40 ` Oops in 2.2.20, 100% reproduceable and fully tracked Brian Gerst
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=01121121200600.00906@localhost.localdomain \
--to=stssppnn@yahoo.com \
--cc=linux-kernel@vger.kernel.org \
--cc=stas.orel@mailcity.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.