内核漏洞(Kernel Oops),当引用一个非法指针的时候,分页机制无法将该地址映射到物理地址,此时处理器会向操作系统发出page fault的信号。如果地址非法,内核就无法page in缺失页面,此时处理器恰好是超级用户模式,系统就会发出Oops。比如解引用NULL pointer。
Oops: 0000 [#1] PREEMPT SMP
Modules linked in: capidrv kernelcapi isdn slhc ipv6 loop dm_multipath snd_ens1371 gameport snd_rawmidi snd_ac97_codec ac97_bus snd_seq_dummy snd_seq_oss snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss snd_mixer_oss snd_pcm snd_timer snd parport_pc floppy parport pcnet32 soundcore mii pcspkr snd_page_alloc ac i2c_piix4 i2c_core button power_supply sr_mod sg cdrom ata_piix libata dm_snapshot dm_zero dm_mirror dm_mod BusLogic sd_mod scsi_mod ext3 jbd mbcache uhci_hcd ohci_hcd ehci_hcd
Pid: 1726, comm: kstopmachine Not tainted (2.6.24-rc3-module #2)
EIP: 0060:[<c04e53d6>] EFLAGS: 00010092 CPU: 0
EIP is at list_del+0xa/0x61
EAX: e0c3cc04 EBX: 00000020 ECX: 0000000e EDX: dec62000
ESI: df6e8f08 EDI: 000006bf EBP: dec62fb4 ESP: dec62fa4
DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
Process kstopmachine (pid: 1726, ti=dec62000 task=df8d2d40 task.ti=dec62000)
Stack: 000006bf dec62fb4 c04276c7 00000020 dec62fbc c044ab4c dec62fd0 c045336c
df6e8f08 c04532b4 00000000 dec62fe0 c043deb0 c043de75 00000000 00000000
c0405cdf df6e8eb4 00000000 00000000 00000000 00000000 00000000
Call Trace:
[<c0406081>] sho

本文详细探讨了Linux内核Oops现象,分析了其产生的原因,特别是当引用非法指针导致页故障时的情况。通过EIP值定位到list_del函数,并介绍了如何利用kallsyms、System.map和调试工具进行问题排查。同时,提到了多线程环境下可能出现的页表同步问题,指出正确处理内存共享和线程管理的重要性。
最低0.47元/天 解锁文章
1230

被折叠的 条评论
为什么被折叠?



