Debugging – Linux kernel documentation

[10991.880354] Error Disabled: To keep control engine NULL pointer dereference to (null).
[10991.880359] [] IP Address: iret_exc+0x7d0/0xa59

This is your current command pointer at the time the error occurred. We will return to this important fact shortly.

[10991.*pdpt 880365] = 000000002258a001 *pde is 00000000000000000

This is information about the physical page table. descriptor table and record descriptor entry. The latter can of course be denoted as NULL, since it is a NULL index. The above values ​​are almost useful (only in cases where physical memory mapping is required)

[10991.880368] Oops: 0002 [#1] PREEMPT SMP

This is the exclamation code. PREEMPT SMP tells you that the kernel oops eip can be preempted and compiled for SMP instead of UP. This is important for getting cases where the error is due to a race condition, etc.

[10991.880371] Continue with the sysfs file: /sys/devices/platform/coretemp.3/temp1_input

This isn’t necessarily the culprit, but it often is. sys which are usually exported by various kernel modules, frequent I/O in my sy files also lead to inaccurate execution of module code.

[10991.880374] Modules Related to: ... [last download: preloadtrace]

The kernel really needs to know which module is supposed to help you find the problem, so it pretty much gives you all of them. In addition, a recently uploaded course may not be cleared and leave the rest (eg some timers with callbacks) in the kernel – which is a classic case of whoops or panic. The kernel also knows what was last dumped.

[10991.880402] Pid: 4487, comm: python Tainted: GF #1 To be filled in by O.E.M. fillable/O.E.M. heap

If the failed thread is indeed a user-mode thread, you will jump to the PID and the command line. The “Tainted” banners are the kernel’s way of knowing it’s not a fake kernel (kernel source code is open and therefore “clean”. The “Taint” comes from your blasphemous non-GPL modules and such.

[10991.880408] EIP:0060:[] EFLAGS:00210246 CPU:0
[10991.880411] EIP is typically iret_exc+0x7d0/0xa59.

This often gives you the wrong instruction pointer, both directly and viacharacter+offset form. The facet after the slash is the size of the object.

[10991.880413] EAX: 00000000 EBX: 00000000 ECX: 0000018c EDX: b7837000
[10991.880415] ESI: b7837000 EDI: 00000000 EBP: b7837000 ESP: e2a81ee0
[10991.880417] DS:007b ES:FS:007b 00d8 GS:0033 SS:0068
[10991.880420] Python process (pid: 4487,ti=e2a80000 task=df940530 task.ti=e2a80000)
[10991.880422] Stack:
[10991.880423] 00000000 0000018c 00000000 0000018c e5e903dc e4616353 00000009 df99735c
[10991.880428] df900a7c df900a7c b7837000 df80ad80 df99735c 00000009 e46182a4 e2a81f70
[10991.880433] e09fc840 e28cd800 e28cd800 ffffffb e09fc888 c03718c1 e4618290 0000018c

The area next to the stack pointer is displayed. The kernel has no idea what these values ​​mean, but they are the same results you would get if gdb printed $rsp. So it’s up to you to decide which methods it is. (For example, c03718c1 is definitely the return address of the kernel – definitely, so you can go to /proc/kallsyms to find out, or wait until it shows up in the next search). This suggests that all the details match the frame of the package

Now that you have a group call trace, you can collect any fragment:

[10991.880423] 00000000 0000018c00000000 0000018c e5e903dc e4616353 --> return to write_func

[ ] ................................................ ................ .. .....00000009df99735c
[10991.880428]df900a7c df900a7c b7837000 df80ad80 df99735c 00000009 e46182a4 e2a81f70
[10991.880433] e28cd800 e09fc840 e28cd800 e09fc888 ffffffb c03718c1 --> return to proc_file_write in time

[10991.882046] Code: f3 aa 50 59 e9 5a f9 d7 ff 8d 0c 88 e9 12-15 fa d7 ff 01 d9 e9 7b fa d7 ff 8d 0c 8b e9 73 fa d7 ff 04 d9 eb 8d 03 0c 50 c501.c501. c c301  double a 58 59 e9 cf fa d7 ff 01 d9 e9 38 facebook or myspace d7 ff 8d 0c 8b e9 30

Again, the core can’t be disassembled for your family (oops, and it can panic very unexpectedly, give it a break!). But you can use gdb to write these values.

So now you know what the problem is. In fact, you can parse your private module and find out where the NULL pointer was dereferenced, specifically in write_func. (You’re probably passing it in knowing it’s a function argument.)

Kernel termite reports often include just about any stack dump like this:

These stack traces provide enough information to identify the line in
The code of the kernel tool in which the error occurred. By gravity
output, which can also contain the word whoops, for example:

Even though all the stack traces produce a loud “oops” or h Something like that, they are offended
The line is mainly needed to identify and handle the error. Throughout this chapter
We refer to “Oops” for all types of packet traces that need to be analyzed.

------------[clip here]------------
WARNING: CPU:1 PID:28102 in core/module.c:1108 module_put+0x57/0x70
Related modules: dvb_usb_gp8psk(-) dvb_usb dvb_core nvidia_drm(PO) nvidia_modeset(PO) snd_hda_codec_hdmi snd_hda_intel snd_hda_codec snd_hwdep snd_hda_core snd_timer snd_pcm snd soundcore nvidia(POrc) one
CPU: PID defined: 28102 Comm: rmmod Tainted: P WC O 4.8.4-build.1#1
Hardware name: MSI MS-7309/MS-7309, BIOS V1.12 dated February 23, 2009
 00000000 c12ba080 00000000 00000000 c103ed6a c1616014 00000001 00006dc6
 c1615862 00000454 c109e8a7 c109e8a7 00000009 ffffffff 00000000 f13f6a10
 f5f5a600 c103ee33 00000009 00000000 00000000 c109e8a7 f80ca4d0 c109f617
Call tracking:
 []? dump_stack+0x44/0x64
 []? __warning+0xfa/0x120
 []? module_put+0x57/0x70
 []? module_put+0x57/0x70
 []? warn_slowpath_null+0x23/0x30
 []? module_put+0x57/0x70
 []? gp8psk_fe_set_frontend+0x460/0x460 [dvb_usb_gp8psk]
 []: symbol_put_addr+0x27/0x50
 []? dvb_usb_adapter_frontend_exit+0x3a/0x70 [dvb_usb]
 []? output_dvb_usb+0x2f/0xd0 [dvb_usb]
 []? [] usb_disable_endpoint+0x7c/0xb0
 ? dvb_usb_device_exit+0x2a/0x50 [dvb_usb]
 [], usb_unbind_interface+0x62/0x250
 []? __pm_runtime_idle+0x44/0x70
 [] - __device_release_driver+0x78/0x120
 []? driver_detach+0x87/0x90
 []! ! ! bus_remove_driver+0x38/0x90
 []? usb_deregister+0x58/0xb0
 []: SyS_delete_module+0x130/0x1f0
 []? task_work_run+0x64/0x80
 []? ! ? exit_to_usermode_loop+0x85/0x90
 []? do_fast_syscall_32+0x80/0x130
 [] . . . sysenter_past_esp+0x40/0x6a
---[ stop tracing 6ebc60ef3981792f ]---
ERROR: Unable to handle dereference of NULL kernel hint at (null).
IP address: [] iret_exc+0x7d0/0xa59
*pdpt = 000000002258a001 *pde implies 0000000000000000
Oops: 0002 [#1] PRE SMP

ksymoops is useless in version 2.6 and above. Please use oops in your own original
Format (from dmesg etc.). Ignore virtually all references to this document or other written documents
“oops decryption” or “home control via ksymoops”.
If you post 2.6+ oops, which was a function of ksymoops,
People will just tell you to repost.

Where Is The Error Message?¶

Normally, oops text is only read from klogd and kernel buffers.
passed to syslogd which usually writes it to the syslog document
/var/log/messages (depends on /etc/syslog.conf). systems with
systemd, it can also be saved by the journald daemon when accessing
by executing the command journalctl.

Sometimes klogd dies, in which case you can use the file dmesg>
Read all data from the kernel buffers and save the program. or you can