帮忙看个oops,很纠结~~~
时间:2010-11-23
来源:互联网
9037 Nov 22 19:06:12 zhengzp kernel: [ 596.304378] IP: [<c042ee28>] __skb_recv_datagram+0xb8/0x210
9038 Nov 22 19:06:12 zhengzp kernel: [ 596.304389] Oops: 0002 [#1] SMP
9039 Nov 22 19:06:12 zhengzp kernel: [ 596.304390] last sysfs file: /sys/devices/virtual/vc/vcsa1/dev
9040 Nov 22 19:06:12 zhengzp kernel: [ 596.304430] Process test (pid: 3817, ti=decae000 task=df61cb60 task.ti=decae000)
9041 Nov 22 19:06:12 zhengzp kernel: [ 596.304431] Stack:
9042 Nov 22 19:06:12 zhengzp kernel: [ 596.304435] c143363c decafe50 00000040 df705d40 decafe58 decafe6c c0478e2b decafe58
9043 Nov 22 19:06:12 zhengzp kernel: [ 596.304438] 00001a37 decafe5c decafe58 decaff8c 00000000 00000000 c1433600 decafe74
9044 Nov 22 19:06:12 zhengzp kernel: [ 596.304441] Call Trace:
9045 Nov 22 19:06:12 zhengzp kernel: [ 596.304443] [<c0502f01>] ? _spin_unlock_bh+0x11/0x20
9046 Nov 22 19:06:12 zhengzp kernel: [ 596.304446] [<c0478e2b>] ? udp_recvmsg+0x6b/0x2e0
9047 Nov 22 19:06:13 zhengzp kernel: [ 596.304449] [<c012ad96>] ? dequeue_entity+0x16/0x2a0
9048 Nov 22 19:06:13 zhengzp kernel: [ 596.304452] [<c0427c73>] ? sock_common_recvmsg+0x43/0x60
9049 Nov 22 19:06:13 zhengzp kernel: [ 596.304455] [<c04272b4>] ? sock_recvmsg+0xf4/0x120
9050 Nov 22 19:06:13 zhengzp kernel: [ 596.304457] [<c012f9cb>] ? finish_task_switch+0x2b/0xe0
9051 Nov 22 19:06:13 zhengzp kernel: [ 596.304460] [<c014ecb0>] ? autoremove_wake_function+0x0/0x50
9052 Nov 22 19:06:13 zhengzp kernel: [ 596.304463] [<c014424a>] ? try_to_del_timer_sync+0x4a/0x60
9053 Nov 22 19:06:13 zhengzp kernel: [ 596.304465] [<c0144271>] ? del_timer_sync+0x11/0x20
9054 Nov 22 19:06:13 zhengzp kernel: [ 596.304467] [<c05016e6>] ? schedule_timeout+0x86/0xe0
9055 Nov 22 19:06:13 zhengzp kernel: [ 596.304471] [<e19504f0>] ? thread_fun+0x110/0x160 [test]
9056 Nov 22 19:06:13 zhengzp kernel: [ 596.304475] [<c014e71d>] ? sys_timer_settime+0x11d/0x120
9057 Nov 22 19:06:13 zhengzp kernel: [ 596.304477] [<c014e8d0>] ? kthread+0x0/0x70
9058 Nov 22 19:06:13 zhengzp kernel: [ 596.304478] Code: 89 ca e8 4c 3f 0d 00 89 d8 83 c4 28 5b 5e 5f 5d c3 66 90 83 6e 74 01 8b 13 8b 43 04 c7 03 00 00 00 00 c7 43 04 00 00 00 00 89 10 <89> 42 04 eb cd 8d 76 00 8b 86 f8 00 00 00 89 45 d8 e9 6e ff ff
9059 Nov 22 19:06:13 zhengzp kernel: [ 596.304495] EIP: [<c042ee28>] __skb_recv_datagram+0xb8/0x210 SS:ESP 0068:decafdf4
- #include "kthread.h"
- #include "public.h"
- #include <linux/kthread.h>
- #include <linux/errno.h>
- #include <linux/kernel.h>
- #include <linux/sched.h>
- #include <linux/err.h>
- #include <linux/inet.h>
- #include <linux/udp.h>
- #include <linux/err.h>
- #include <asm-generic/errno.h>
- #include <linux/syscalls.h> //系统调用函数的头文件
- #include <linux/socket.h>
- #include <net/sock.h>
- #include <linux/inet.h>
- #include <net/checksum.h>
- #include <net/udp.h>
-
- #define PORT 6520
- char g_buf[BUF_LEN];
-
- static void* thread_fun(char* buf)
- {
- int err;
- struct msghdr msg;
- struct iovec iov;
- struct socket* sock_server = NULL;
- struct sockaddr_in server_addr;
-
-
- iov.iov_base = buf;
- iov.iov_len = BUF_LEN;
-
- memset(&msg,0,sizeof(struct msghdr));
- msg.msg_name = NULL;
- msg.msg_namelen = 0;
- msg.msg_iov = &iov;
- msg.msg_iovlen = 1; // 记录有多少个buf
- msg.msg_control = NULL;
- msg.msg_controllen = 0;
- msg.msg_flags = MSG_DONTWAIT;
-
- memset(&sock_server,0,sizeof(struct sockaddr_in));
- server_addr.sin_family = AF_INET;
- server_addr.sin_addr.s_addr = INADDR_ANY;
- server_addr.sin_port = htons(PORT);
-
- // 创建一个socket
- err = sock_create(AF_INET,SOCK_DGRAM,IPPROTO_UDP,&sock_server);
- if (err < 0)
- {
- printk(KERN_ALERT "sock create error\n");
- goto out;
- }
- printk(KERN_ALERT " END CREATE SOCK\n");
-
- // 绑定地址
- err = kernel_bind(sock_server,(struct sockaddr*)&server_addr,sizeof(struct sockaddr));
- if (err < 0)
- {
- printk(KERN_ALERT "bind error\n");
- sock_release(sock_server);
- goto out;
- }
-
- while(!kthread_should_stop())
- {
- // 接收数据
- err = sock_recvmsg(sock_server,&msg,BUF_LEN,MSG_DONTWAIT);
- if (err < 0)
- {
- continue;
- }
- else if (err > 0)
- {
- printk(KERN_ALERT "GOT : %s and strlen(buf) is %d\n",buf,strlen(buf));
- }
- msleep(1);
- }
- return 0;
-
- out:
- while(!kthread_should_stop()) // 等待kthead_stop();
- {
- msleep(1);
- }
-
- return NULL;
- }
-
- struct task_struct* test_thread_create(void)
- {
- printk(KERN_ALERT "THREAD BEGIN\n");
- struct task_struct* temp_kthread = NULL;
- temp_kthread = kthread_run(thread_fun,(void*)g_buf,MODULE_NAME);
- if (IS_ERR(temp_kthread))
- {
- printk(KERN_ALERT "cant run thread\n");
- return NULL;
- }
- return temp_kthread;
- }
-
- int test_thread_destroy(struct task_struct* temp_kthread)
- {
- printk(KERN_ALERT "DESTROY THREAD BEGIN\n");
- if (temp_kthread != NULL)
- {
- kthread_stop(temp_kthread);
- }
-
- return 0;
- }
作者: xiaopeng14 发布时间: 2010-11-23
这句有问题,
应该是
memset(&server_addr,0,sizeof(struct sockaddr_in));
你变量名字太像了 混淆了吧
作者: chobit_s 发布时间: 2010-11-23
作者: xiaopeng14 发布时间: 2010-11-23
作者: xiaopeng14 发布时间: 2010-11-23
因为socket层设置sock和sk是一个较为复杂的流程。从oops信息初步判断:
9046 Nov 22 19:06:12 zhengzp kernel: [ 596.304446] [<c0478e2b>] ? udp_recvmsg+0x6b/0x2e0
感觉像是udp_recvmsg中不正确地使用了锁造成的。这个原因我大胆地假设一下,会不会是sk未被正确完全地初始化从而造成的呢??其实lz要解决这个问题,可以在udp_recvmsg中加一些printk,先判断问题语句。如果汇编OK,也可以根据oops信息,结果编译后的汇编代码来定位问题代码行……然后再进一步把问题拿上来讨论吧。
作者: 独孤九贱 发布时间: 2010-11-23
作者: smalloc 发布时间: 2010-11-23
因为socket层设置sock和sk是一个较为复 ...
独孤九贱 发表于 2010-11-23 11:38
我也估计是socket的初始化问题,关键我就不知道怎么来初始化,现在我改成阻塞模式了,一旦接受数据就OOPS
[ 390.556742] BUG: unable to handle kernel NULL pointer dereference at 00000048
[ 390.556747] IP: [<c04272b1>] sock_recvmsg+0xf1/0x120
[ 390.556774] *pde = 00000000
[ 390.556776] Oops: 0000 [#1] SMP
[ 390.556778] last sysfs file: /sys/devices/virtual/vc/vcsa1/dev
[ 390.556792] Dumping ftrace buffer:
[ 390.556794] (ftrace buffer empty)
[ 390.556795] Modules linked in: test1 binfmt_misc vboxsf bridge stp bnep vboxnetflt vboxdrv input_polldev video output lp ppdev psmouse serio_raw pcspkr i2c_piix4 joydev vboxguest parport_pc parport usbhid e1000 fbcon tileblit font bitblit softcursor
[ 390.556806]
[ 390.556808] Pid: 3594, comm: test Not tainted (2.6.28-11-generic #42-Ubuntu) VirtualBox
[ 390.556809] EIP: 0060:[<c04272b1>] EFLAGS: 00010246 CPU: 0
[ 390.556811] EIP is at sock_recvmsg+0xf1/0x120
[ 390.556812] EAX: ded59ea8 EBX: 00000000 ECX: ded59f8c EDX: cc82f004
[ 390.556814] ESI: 00000064 EDI: cc82f004 EBP: ded59f78 ESP: ded59e9c
[ 390.556815] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
[ 390.556817] Process test (pid: 3594, ti=ded58000 task=dfe9e480 task.ti=ded58000)
[ 390.556818] Stack:
[ 390.556818] 00000064 00000000 00000000 ded59ec8 c012f9cb 00000000 00000001 ffffffff
[ 390.556822] 00000000 00000000 00000000 00000000 00000000 dfe9e480 00000000 00000000
[ 390.556825] c0802500 dfe9e480 c014ecb0 ded59ee8 ded59ee8 ded59f2c 00000000 ded59f2c
[ 390.556828] Call Trace:
[ 390.556829] [<c012f9cb>] ? finish_task_switch+0x2b/0xe0
[ 390.556833] [<c014ecb0>] ? autoremove_wake_function+0x0/0x50
[ 390.556836] [<c014424a>] ? try_to_del_timer_sync+0x4a/0x60
[ 390.556839] [<c0144271>] ? del_timer_sync+0x11/0x20
[ 390.556841] [<c05016e6>] ? schedule_timeout+0x86/0xe0
[ 390.556845] [<e1949501>] ? thread_fun+0x111/0x170 [test1]
[ 390.556849] [<e19493f0>] ? thread_fun+0x0/0x170 [test1]
[ 390.556851] [<c014e90c>] ? kthread+0x3c/0x70
[ 390.556853] [<c014e8d0>] ? kthread+0x0/0x70
[ 390.556854] [<c0105477>] ? kernel_thread_helper+0x7/0x10
[ 390.556857] Code: 56 09 e6 ff 85 c0 75 26 8b 47 0c 89 d9 89 fa 89 85 2c ff ff ff 8b 45 08 89 34 24 89 44 24 04 8b 9d 2c ff ff ff 8d 85 30 ff ff ff <ff> 53 48 3d ef fd ff ff 74 0d 81 c4 d0 00 00 00 5b 5e 5f 5d c3
[ 390.556873] EIP: [<c04272b1>] sock_recvmsg+0xf1/0x120 SS:ESP 0068:ded59e9c
[ 390.556877] ---[ end trace b2ea34c242159276 ]---
[ 462.741239] DESTROY THREAD BEGIN
[ 462.741274] BUG: unable to handle kernel NULL pointer dereference at 00000390
作者: xiaopeng14 发布时间: 2010-11-23
这是 oops 最常见的错误,解引用空指针
作者: Godbach 发布时间: 2010-11-23
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28