Opened 16 years ago
Closed 16 years ago
#1875 closed defect (fixed)
Linux 2.6.26.* crashes at boot (kernel panic) -> fixed in 2.0.2
Reported by: | Oxmosys | Owned by: | |
---|---|---|---|
Component: | other | Version: | VirtualBox 1.6.2 |
Keywords: | Cc: | ||
Guest type: | other | Host type: | other |
Description
Current ubuntu intrepid alpha 3 release crashes at start with a kernel panic under VBox 1.6.2 when VT-x is not enabled.
http://cdimage.ubuntu.com/releases/intrepid/alpha-3/ https://bugs.launchpad.net/ubuntu/intrepid/+source/linux/+bug/246067
Change History (8)
comment:1 by , 16 years ago
comment:2 by , 16 years ago
Ubuntu 2.6.26: Adding printk debug to text_poke_early on a non-SMP virtualised machine stops the bug happening. Any indication this bug could be a VirtualBox problem when modifying executable code?
void *text_poke_early(void *addr, const void *opcode, size_t len) {
unsigned long flags;
printk("text_poke_early: %p..%p\n",addr,addr+len);
local_irq_save(flags);
....
Colin King.
comment:3 by , 16 years ago
No, this sounds like a Linux bug, see my previous comment. Adding the instruction printk
you change the timing.
comment:5 by , 16 years ago
This issue has been discussed by Linux kernel people in the following thread:
http://lkml.org/lkml/2008/8/20/359
They think that this is a virtualbox bug...
Frank, are you a virtualbox developer? Isn't this easier to debug on the virtualbox side? What can I do to help you debbug this?
comment:6 by , 16 years ago
I've dug a bit deeper, and I have some more information to add to this bug report.
By adding control code to apply_paravirt() in arch/x86/kernel/alternative.c I've been able to selectively turn on and off the code that patches parts of the kernel. The bug occurs when vprintk is patched. This is repeatable at the same region of patched code.
Below is a disassembly of vprintk, look for the " patching occurs after here" annotation to show roughly where the patched code is applied.
Not sure if that helps.
Colin
00000850 <vprintk>: 850: 55 push %ebp 851: 89 e5 mov %esp,%ebp 853: 57 push %edi 854: 56 push %esi 855: 53 push %ebx 856: 83 ec 60 sub $0x60,%esp 859: e8 fc ff ff ff call 85a <vprintk+0xa> 85e: a1 04 00 00 00 mov 0x4,%eax 863: 89 45 ac mov %eax,-0x54(%ebp) 866: 51 push %ecx 867: 52 push %edx 868: ff 15 04 00 00 00 call *0x4 86e: 5a pop %edx 86f: 59 pop %ecx 870: 89 45 b0 mov %eax,-0x50(%ebp) 873: 51 push %ecx 874: 52 push %edx 875: ff 15 0c 00 00 00 call *0xc 87b: 5a pop %edx 87c: 59 pop %ecx 87d: a1 70 00 00 00 mov 0x70,%eax 882: 64 8b 15 00 00 00 00 mov %fs:0x0,%edx 889: 89 55 b4 mov %edx,-0x4c(%ebp) 88c: 39 c2 cmp %eax,%edx 88e: 0f 84 9c 02 00 00 je b30 <vprintk+0x2e0> 894: b8 0c 00 00 00 mov $0xc,%eax 899: e8 fc ff ff ff call 89a <vprintk+0x4a> 89e: 8b 4d b4 mov -0x4c(%ebp),%ecx 8a1: 89 0d 70 00 00 00 mov %ecx,0x70 8a7: 8b 0d e4 00 02 00 mov 0x200e4,%ecx 8ad: 85 c9 test %ecx,%ecx 8af: 0f 85 33 02 00 00 jne ae8 <vprintk+0x298> 8b5: 31 db xor %ebx,%ebx 8b7: ba 00 04 00 00 mov $0x400,%edx 8bc: b8 00 01 02 00 mov $0x20100,%eax 8c1: 8b 4d 0c mov 0xc(%ebp),%ecx 8c4: 89 0c 24 mov %ecx,(%esp) 8c7: 8b 4d 08 mov 0x8(%ebp),%ecx 8ca: e8 fc ff ff ff call 8cb <vprintk+0x7b> 8cf: 01 d8 add %ebx,%eax 8d1: 89 45 bc mov %eax,-0x44(%ebp) 8d4: 0f b6 05 00 01 02 00 movzbl 0x20100,%eax 8db: 84 c0 test %al,%al 8dd: 0f 84 a5 00 00 00 je 988 <vprintk+0x138> 8e3: 8d 5d c2 lea -0x3e(%ebp),%ebx 8e6: bf 00 01 02 00 mov $0x20100,%edi 8eb: 89 5d a8 mov %ebx,-0x58(%ebp) 8ee: eb 65 jmp 955 <vprintk+0x105> 8f0: 3c 3c cmp $0x3c,%al 8f2: 0f 84 78 01 00 00 je a70 <vprintk+0x220> 8f8: b8 3c 00 00 00 mov $0x3c,%eax 8fd: e8 0e f8 ff ff call 110 <emit_log_char> 902: 0f b6 45 ac movzbl -0x54(%ebp),%eax 906: 83 c0 30 add $0x30,%eax 909: 0f be c0 movsbl %al,%eax 90c: e8 ff f7 ff ff call 110 <emit_log_char> 911: b8 3e 00 00 00 mov $0x3e,%eax 916: e8 f5 f7 ff ff call 110 <emit_log_char> 91b: 8b 35 38 00 00 00 mov 0x38,%esi 921: 83 45 bc 03 addl $0x3,-0x44(%ebp) 925: c7 05 74 00 00 00 00 movl $0x0,0x74 92c: 00 00 00 92f: 85 f6 test %esi,%esi 931: 0f 85 99 00 00 00 jne 9d0 <vprintk+0x180> 937: 0f b6 07 movzbl (%edi),%eax 93a: 84 c0 test %al,%al 93c: 74 4a je 988 <vprintk+0x138> 93e: 0f be c0 movsbl %al,%eax 941: e8 ca f7 ff ff call 110 <emit_log_char> 946: 80 3f 0a cmpb $0xa,(%edi) 949: 74 24 je 96f <vprintk+0x11f> 94b: 83 c7 01 add $0x1,%edi 94e: 0f b6 07 movzbl (%edi),%eax 951: 84 c0 test %al,%al 953: 74 33 je 988 <vprintk+0x138> 955: 8b 15 74 00 00 00 mov 0x74,%edx 95b: 85 d2 test %edx,%edx 95d: 75 91 jne 8f0 <vprintk+0xa0> 95f: 0f b6 07 movzbl (%edi),%eax 962: 0f be c0 movsbl %al,%eax 965: e8 a6 f7 ff ff call 110 <emit_log_char> 96a: 80 3f 0a cmpb $0xa,(%edi) 96d: 75 dc jne 94b <vprintk+0xfb> 96f: 83 c7 01 add $0x1,%edi 972: 0f b6 07 movzbl (%edi),%eax 975: c7 05 74 00 00 00 01 movl $0x1,0x74 97c: 00 00 00 97f: 84 c0 test %al,%al 981: 75 d2 jne 955 <vprintk+0x105> 983: 90 nop 984: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi 988: e8 fc ff ff ff call 989 <vprintk+0x139> 98d: 31 f6 xor %esi,%esi 98f: 85 c0 test %eax,%eax 991: 0f 84 11 01 00 00 je aa8 <vprintk+0x258> 997: c7 05 70 00 00 00 ff movl $0xffffffff,0x70 99e: ff ff ff 9a1: b8 0c 00 00 00 mov $0xc,%eax 9a6: ff 15 10 00 00 00 call *0x10 9ac: 85 f6 test %esi,%esi 9ae: 74 05 je 9b5 <vprintk+0x165> 9b0: e8 fc ff ff ff call 9b1 <vprintk+0x161> **** patching occurs after here 9b5: 8b 45 b0 mov -0x50(%ebp),%eax 9b8: 51 push %ecx 9b9: 52 push %edx 9ba: ff 15 08 00 00 00 call *0x8 9c0: 5a pop %edx 9c1: 59 pop %ecx 9c2: 8b 45 bc mov -0x44(%ebp),%eax 9c5: 83 c4 60 add $0x60,%esp 9c8: 5b pop %ebx 9c9: 5e pop %esi 9ca: 5f pop %edi 9cb: 5d pop %ebp 9cc: c3 ret 9cd: 8d 76 00 lea 0x0(%esi),%esi 9d0: a1 70 00 00 00 mov 0x70,%eax 9d5: e8 fc ff ff ff call 9d6 <vprintk+0x186> 9da: 89 45 a4 mov %eax,-0x5c(%ebp) 9dd: 31 c0 xor %eax,%eax 9df: 85 d2 test %edx,%edx 9e1: 89 d1 mov %edx,%ecx 9e3: 74 1c je a01 <vprintk+0x1b1> 9e5: b8 83 4b 04 00 mov $0x44b83,%eax 9ea: c1 ea 09 shr $0x9,%edx 9ed: f7 e2 mul %edx 9ef: c1 ea 07 shr $0x7,%edx 9f2: 69 c2 00 ca 9a 3b imul $0x3b9aca00,%edx,%eax 9f8: 29 c1 sub %eax,%ecx 9fa: 89 c8 mov %ecx,%eax 9fc: 89 d1 mov %edx,%ecx 9fe: c1 e9 00 shr $0x0,%ecx a01: 89 c6 mov %eax,%esi a03: bb 00 ca 9a 3b mov $0x3b9aca00,%ebx a08: 8b 45 a4 mov -0x5c(%ebp),%eax a0b: 89 f2 mov %esi,%edx a0d: f7 f3 div %ebx a0f: 89 d6 mov %edx,%esi a11: 89 ca mov %ecx,%edx a13: 89 c1 mov %eax,%ecx a15: b8 d3 4d 62 10 mov $0x10624dd3,%eax a1a: f7 e6 mul %esi a1c: 89 4c 24 08 mov %ecx,0x8(%esp) a20: 8d 75 c2 lea -0x3e(%ebp),%esi a23: c7 44 24 04 05 00 00 movl $0x5,0x4(%esp) a2a: 00 a2b: c1 ea 06 shr $0x6,%edx a2e: 89 54 24 0c mov %edx,0xc(%esp) a32: 8d 55 c2 lea -0x3e(%ebp),%edx a35: 89 14 24 mov %edx,(%esp) a38: e8 fc ff ff ff call a39 <vprintk+0x1e9> a3d: 01 c6 add %eax,%esi a3f: 3b 75 a8 cmp -0x58(%ebp),%esi a42: 89 45 b8 mov %eax,-0x48(%ebp) a45: 76 18 jbe a5f <vprintk+0x20f> a47: 8d 5d c2 lea -0x3e(%ebp),%ebx a4a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi a50: 0f be 03 movsbl (%ebx),%eax a53: 83 c3 01 add $0x1,%ebx a56: e8 b5 f6 ff ff call 110 <emit_log_char> a5b: 39 f3 cmp %esi,%ebx a5d: 72 f1 jb a50 <vprintk+0x200> a5f: 8b 4d b8 mov -0x48(%ebp),%ecx a62: 01 4d bc add %ecx,-0x44(%ebp) a65: e9 cd fe ff ff jmp 937 <vprintk+0xe7> a6a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi a70: 0f b6 47 01 movzbl 0x1(%edi),%eax a74: 3c 2f cmp $0x2f,%al a76: 0f 8e 7c fe ff ff jle 8f8 <vprintk+0xa8> a7c: 3c 37 cmp $0x37,%al a7e: 0f 8f 74 fe ff ff jg 8f8 <vprintk+0xa8> a84: 80 7f 02 3e cmpb $0x3e,0x2(%edi) a88: 0f 85 6a fe ff ff jne 8f8 <vprintk+0xa8> a8e: 0f be c0 movsbl %al,%eax a91: 83 c7 03 add $0x3,%edi a94: 83 e8 30 sub $0x30,%eax a97: 89 45 ac mov %eax,-0x54(%ebp) a9a: 83 6d bc 03 subl $0x3,-0x44(%ebp) a9e: e9 55 fe ff ff jmp 8f8 <vprintk+0xa8> aa3: 90 nop aa4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi aa8: 8b 5d b4 mov -0x4c(%ebp),%ebx aab: 0f a3 1d 00 00 00 00 bt %ebx,0x0 ab2: 19 c0 sbb %eax,%eax ab4: 85 c0 test %eax,%eax ab6: 75 22 jne ada <vprintk+0x28a> ab8: a1 00 00 00 00 mov 0x0,%eax abd: 85 c0 test %eax,%eax abf: 75 0e jne acf <vprintk+0x27f> ac1: eb 52 jmp b15 <vprintk+0x2c5> ac3: 90 nop ac4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi ac8: 8b 40 34 mov 0x34(%eax),%eax acb: 85 c0 test %eax,%eax acd: 74 46 je b15 <vprintk+0x2c5> acf: f6 40 28 10 testb $0x10,0x28(%eax) ad3: 90 nop ad4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi ad8: 74 ee je ac8 <vprintk+0x278> ada: be 01 00 00 00 mov $0x1,%esi adf: 90 nop ae0: e9 b2 fe ff ff jmp 997 <vprintk+0x147> ae5: 8d 76 00 lea 0x0(%esi),%esi ae8: ba 40 00 00 00 mov $0x40,%edx aed: b8 00 01 02 00 mov $0x20100,%eax af2: c7 05 e4 00 02 00 00 movl $0x0,0x200e4 af9: 00 00 00 afc: bb 22 00 00 00 mov $0x22,%ebx b01: e8 fc ff ff ff call b02 <vprintk+0x2b2> b06: ba de 03 00 00 mov $0x3de,%edx b0b: b8 22 01 02 00 mov $0x20122,%eax b10: e9 ac fd ff ff jmp 8c1 <vprintk+0x71> b15: b8 4c 00 00 00 mov $0x4c,%eax b1a: 31 f6 xor %esi,%esi b1c: c7 05 14 00 00 00 00 movl $0x0,0x14 b23: 00 00 00 b26: e8 fc ff ff ff call b27 <vprintk+0x2d7> b2b: e9 67 fe ff ff jmp 997 <vprintk+0x147> b30: 8b 1d 00 00 00 00 mov 0x0,%ebx b36: 85 db test %ebx,%ebx b38: 74 64 je b9e <vprintk+0x34e> b3a: a1 00 00 00 00 mov 0x0,%eax b3f: 8b 0d 10 00 00 00 mov 0x10,%ecx b45: 39 c8 cmp %ecx,%eax b47: 78 14 js b5d <vprintk+0x30d> b49: 8b 15 00 00 00 00 mov 0x0,%edx b4f: 8d 81 b8 0b 00 00 lea 0xbb8(%ecx),%eax b55: 39 d0 cmp %edx,%eax b57: 0f 89 37 fd ff ff jns 894 <vprintk+0x44> b5d: a1 00 00 00 00 mov 0x0,%eax b62: c7 05 0c 00 00 00 00 movl $0x0,0xc b69: 00 00 00 b6c: c7 05 4c 00 00 00 00 movl $0x0,0x4c b73: 00 00 00 b76: c7 05 50 00 00 00 01 movl $0x1,0x50 b7d: 00 00 00 b80: a3 10 00 00 00 mov %eax,0x10 b85: c7 05 54 00 00 00 54 movl $0x54,0x54 b8c: 00 00 00 b8f: c7 05 58 00 00 00 54 movl $0x54,0x58 b96: 00 00 00 b99: e9 f6 fc ff ff jmp 894 <vprintk+0x44> b9e: c7 05 e4 00 02 00 01 movl $0x1,0x200e4 ba5: 00 00 00 ba8: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) baf: e9 01 fe ff ff jmp 9b5 <vprintk+0x165> bb4: 8d b6 00 00 00 00 lea 0x0(%esi),%esi bba: 8d bf 00 00 00 00 lea 0x0(%edi),%edi
comment:7 by , 16 years ago
Summary: | Linux 2.6.26.* crashes at boot (kernel panic) → Linux 2.6.26.* crashes at boot (kernel panic) -> fixed in 2.0.2 |
---|
Should be fixed now. It was indeed a VirtualBox problem. The recompiler didn't notice the instruction modifications made by the paravirtops part.
comment:8 by , 16 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
A Debian guy found out that things improve a lot if the following changeset is removed from the Linux kernel sources: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e587cadd8f47e202a30712e2906a65a0606d5865