Since
1933, the common
exclamation made when people realize that they have made a
mistake. Used typically to express mild
apology,
surprise, or
dismay.
An Oops message is the Linux kernel way of telling you that
something went wrong in kernel space. More specifically, an exception occurred in kernel space.
On normal circumstances it should never happen. But when it does,
there are some possible reasons:
- There's a bug in the kernel. That hardly happens in the stable releases, but on development kernels, expect this.
- You have a bad hardware, possibly a bad RAM which causes kernel memory corruption.
- You have loaded a kernel module that either has bugs or is interface-incompatible with the currently running kernel. Loading such module is mostly impossible because kernel modules store the version of the kernel they were compiled against, and some running modes match for that.
Oopses are sent to the system logger and open system console. The system is not stopped or rebooted like in other operating systems. Instead, the process in which the exception occurs just dies and the system
goes on, hoping for the best.
An example:
Unable to handle kernel NULL pointer dereference at virtual address 00000000
printing eip:
00000000
*pde = 00000000
Oops: 0000
CPU: 0
EIP: 0010:[msr_exit+0/20] Not tainted
EFLAGS: 00010246
eax: 00000000 ebx: c21339a0 ecx: 00000000 edx: 00000001
esi: c2133ce8 edi: c2133ca0 ebp: c1c60560 esp: c1d8ff2c
ds: 0018 es: 0018 ss: 0018
Process nscd (pid: 279, stackpage=c1d8f000)
Stack: d88004b6 c21339a0 c1be3690 c1be3580 c142e1e0 c1c60560 00000001 c142e2e0
d6a74140 d88007ea c2133ca0 00000000 c01a3976 c1be3690 c1be3580 c01a3e7e
c1be3690 d6b41e20 c01320f4 c1be3580 d6b41e20 d6b41e20 00000000 c22bed60
Call Trace: [8139too:__insmod_8139too_O/lib/modules/2.4.20-pre7/kernel/drivers/n+-285514/96]
[8139too:__insmod_8139too_O/lib/modules/2.4.20-pre7/kernel/drivers/n+-284694/96]
[sock_release+18/76] [sock_close+50/60] [fput+76/224] [filp_close+85/96]
[sys_close+67/84] [system_call+51/56]
Code: Bad EIP value.
The information is crucial in order to determine if this is a bug or not. The Oops information contains the execution state, which is a stack dump, registers, the current process, and the reason for the fault.
Notice the 'Not Tainted' flag. It means the user didn't load any closed code, "evil"-licensed kernel modules. The kernel developers can't provide any help for you if you loaded such modules. It's like the warranty void if removed label.
Other information is provided for the Oops by the automatic (or not automatic) run of the ksymoops util. This util takes the Oops report that was received from the kernel and uses the System.map and /proc/kcore to print the actuall machine code which triggered the exception along with a detailed corresponding symbol names. This information is imported for other people to investigate the Oops because an Oops with just numbers is equivalently useless to a Windows BSOD.
If you are convinced that the Oops is a bug, you should read the
REPORTING-BUGS file that is provided with the kernel sources, before reporting anything.