免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3227 | 回复: 9
打印 上一主题 下一主题

[内核模块] 关于kdump与crash调试信息求助,麻烦看看是不是这两个软件安装设置有问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-09-03 12:51 |只看该作者 |倒序浏览
关于kdump与crash调试信息求助,麻烦看看是不是这两个软件安装设置有问题?

利用vmlinux和vmcore以后:
[root@csc csc]# crash /usr/lib/debug/lib/modules/2.6.32-431.el6.i686/vmlinux /var/crash/127.0.0.1-2014-09-03-01:06:26/vmcore

crash 6.1.0-5.el6
Copyright (C) 2002-2012  Red Hat, Inc.
Copyright (C) 2004, 2005, 2006, 2010  IBM Corporation
Copyright (C) 1999-2006  Hewlett-Packard Co
Copyright (C) 2005, 2006, 2011, 2012  Fujitsu Limited
Copyright (C) 2006, 2007  VA Linux Systems Japan K.K.
Copyright (C) 2005, 2011  NEC Corporation
Copyright (C) 1999, 2002, 2007  Silicon Graphics, Inc.
Copyright (C) 1999, 2000, 2001, 2002  Mission Critical Linux, Inc.
This program is free software, covered by the GNU General Public License,
and you are welcome to change it and/or distribute copies of it under
certain conditions.  Enter "help copying" to see the conditions.
This program has absolutely no warranty.  Enter "help warranty" for details.

GNU gdb (GDB) 7.3.1
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...

      KERNEL: /usr/lib/debug/lib/modules/2.6.32-431.el6.i686/vmlinux
    DUMPFILE: /var/crash/127.0.0.1-2014-09-03-01:06:26/vmcore  [PARTIAL DUMP]
        CPUS: 8
        DATE: Wed Sep  3 01:06:22 2014
      UPTIME: 1 days, 00:34:06
LOAD AVERAGE: 0.05, 0.01, 0.00
       TASKS: 350
    NODENAME: csc
     RELEASE: 2.6.32-431.el6.i686
     VERSION: #1 SMP Fri Nov 22 00:26:36 UTC 2013
     MACHINE: i686  (3392 Mhz)
      MEMORY: 3.9 GB
       PANIC: "Oops: 0000 [#1] SMP " (check log for details)
         PID: 3219
     COMMAND: "Xorg"
        TASK: df021000  [THREAD_INFO: f1fa0000]
         CPU: 0
       STATE: TASK_RUNNING (PANIC)

然后我用crash>log命令以后发现如下(省略了前面部分):
......
hook_configAAAAAAAAAAAAAAAAAA----a = 2e
BUG: unable to handle kernel NULL pointer dereference at 00000001
IP: [<f81018e8>] FindInsrcPortHashTable+0x8/0x140 [hook_config1]
*pdpt = 0000000033be3001 *pde = 000000011dad8067
Oops: 0000 [#1] SMP
last sysfs file: /sys/devices/virtual/block/dm-2/dm/name
Modules linked in: hook_config1(U) hook_config_message1(U) vfat fat usb_storag
............

hook_configAAAAAAAAAAAAAAAAAA----a = 2b
60060002
hook_configAAAAAAAAAAAAAAAAAA----a = 2c
60060002
hook_configAAAAAAAAAAAAAAAAAA----a = 2d
60060002
hook_configAAAAAAAAAAAAAAAAAA----a = 2e
BUG: unable to handle kernel NULL pointer dereference at 00000001
IP: [<f81018e8>] FindInsrcPortHashTable+0x8/0x140 [hook_config1]
*pdpt = 0000000033be3001 *pde = 000000011dad8067
Oops: 0000 [#1] SMP
last sysfs file: /sys/devices/virtual/block/dm-2/dm/name

...............

[<c07b06ff>] ? napi_skb_finish+0x2f/0x40
[<c07b0bd5>] ? napi_gro_receive+0x25/0x40
[<f8c1d95f>] ? e1000_clean_rx_irq+0x31f/0x450 [e1000e]
[<f8c20058>] ? e1000e_poll+0x78/0x2b0 [e1000e]
[<c07b1e8e>] ? net_rx_action+0xde/0x280
[<c04625ca>] ? __do_softirq+0x8a/0x1a0
[<c04c1861>] ? move_native_irq+0x11/0x50
[<c04b9fbe>] ? audit_syscall_entry+0x1be/0x1e0
[<c046271d>] ? do_softirq+0x3d/0x50
[<c0462875>] ? irq_exit+0x65/0x70
[<c040c250>] ? do_IRQ+0x50/0xc0
[<c0409f10>] ? common_interrupt+0x30/0x38
Code: 0f 97 c1 89 ce 0f 92 c1 89 f2 38 ca 0f 84 9c fe ff ff 8b 40 0c 85 c0 75 c2 31 c0 e9 e7 fe ff ff 8d 76 00 55 57 56 89 d6 53 89 c3 <0f> b6 48 01 0f b6 00 ba 67 66 66 66 01 c1 89 c8 f7 ea c1 fa 02
EIP: [<f81018e8>] FindInsrcPortHashTable+0x8/0x140 [hook_config1] SS:ESP 0068:f1fa1b30
CR2: 0000000000000001

根据上面信息说BUG在0x000000001所以我就
crash> dis -l 00000001
dis: WARNING: 1: no associated kernel symbol found
   0x1: Cannot access memory at address 0x1
但是没有发现
然后我在用了下面命令还是没有发现问题,请问可能是怎么回事呢?这个空指针引用到底会出现在哪里呢?(顺便说下我的是在透明桥上HOOK的,然后这个BUG只有在我把刚刚上网的机子端口连到透明桥一段才会出现)。
crash> l* FindInsrcPortHashTable+0x8
No symbol "FindInsrcPortHashTable" in current context.
gdb: gdb request failed: l* FindInsrcPortHashTable+0x8


论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
2 [报告]
发表于 2014-09-03 16:00 |只看该作者
回复 1# ierent168


    hook_config1这个KO含这个符号。而这个符号crash工具没有加载。
自己把这个KO的汇编objdump出来看吧。

这个明摆着就是一个空指针访问。
BUG: unable to handle kernel NULL pointer dereference at 00000001

00000001是想访问的地址,而不是指令。

论坛徽章:
0
3 [报告]
发表于 2014-09-03 22:59 |只看该作者
回复 2# Tinnal

对啊我用这句 crash> dis -l 0x00000001主要是想对0x00000001这个地址进行反汇编啊,


   

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
4 [报告]
发表于 2014-09-03 23:15 |只看该作者
大哥,我不是已经说了吗。
00000001是想访问的地址,而不是指令。
,你还怎么对它反汇编呀!!!
这个地址要是存在,就不会蹦了。你还想反汇编,唉~~~


你应该反汇编的是FindInsrcPortHashTable+0x8/0x140!!!再结合崩溃时的寄存器以及栈去分析!!


如是对这种反向分析不熟(如果为真,不要追问,没人会答,no money no talk,你不会的可能性为99.9%)。就在FindInsrcPortHashTable这个函数里多打点信息,把每个指针,每个流程都打印一下,去正向分析,这是初学者比较能接受的方式。

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
5 [报告]
发表于 2014-09-04 08:37 |只看该作者
呵呵,tinnal兄说的很对,应该对FindInsrcPortHashTable函数进行反汇编,然后结合代码分析。
从现象上看应该是hook_config1内核模块中代码编写问题,空指针,分析代码逻辑应该能找到原因。

论坛徽章:
0
6 [报告]
发表于 2014-09-10 14:39 |只看该作者
回复 5# humjb_1983

根据您说的基本已经判断了出来,本来以为改好了 但是过了几天又突然死机还是报一样的错误,下面是部分代码,我后来加了一句红色部分,死机情况明显减少,但是最近又突然死了一次,而且发现报的错误一样的。位置也一样。我先说明下PortMidAddr[hv]只是一个保持地址信息的变量,我想将这个地址传递给指针变量ptl.现在报错还是
BUG: unable to handle kernel NULL pointer dereference at 00000001
IP: [<f81018e8>] FindInsrcPortHashTable+0x8/0x140 [hook_config1]

我想知道下该如何将地址信息传递给ptl才不会出现空指针引用呢?

    int FindInsrcPortHashTable(UINT8 *data,UINT8 protocol)
{
        UINT32 hv=hashPort(data);
        srcPortFilter *ptl = NULL;
        switch(protocol)
        {
                case 0x00:
                        if(PortMidAddr[hv] == 0)
                        {
                                return 0;
                        }

                        //主要作用是传递地址
                        ptl = (srcPortFilter *)PortMidAddr[hv];
                        while(ptl)
                        {
                                if(!memcmp(ptl->srcPort,data,2))
                                        return 1;
                                ptl=ptl->next;
                        }
                        return 0;
                        break;
}

论坛徽章:
0
7 [报告]
发表于 2014-09-10 19:30 |只看该作者
回复 5# humjb_1983

我刚刚又用 objdump反汇编了下.ko文件,定位出来了是在 FindInsrcPortHashTable函数中调用hashport()函数时候出现错误了,但是根据我的分析这个错误又不可能会产生空指针的。

如下红色部分为根据opps信息定位到出错的地方,在C语言中对于语句是return (srcPort[0]+srcPort[1])%srcPortFilt_HEAD_SIZE; 这句话主要是通过data指针将数据传递给srcPort[]数组
我之所以认为矛盾是因为,首先我的data指针不会传递空地址进去,而且数据包够长,也不会发生越界情况。

int FindInsrcPortHashTable(UINT8 *data,UINT8 protocol)
{
     960:       55                      push   %ebp
     961:       57                      push   %edi
     962:       56                      push   %esi
     963:       89 d6                   mov    %edx,%esi
     965:       53                      push   %ebx
     966:       89 c3                   mov    %eax,%ebx


//*****************************************************æo<90>Portå<9c>°å<9d><80>ç<9a><84>Hash表å<8c>1é<85><8d>é<83>¨å<88><86>*****************************************************//

UINT32 hashPort(UINT8  srcPort[])
{
        return (srcPort[0]+srcPort[1])%srcPortFilt_HEAD_SIZE;
     968:       0f b6 48 01             movzbl 0x1(%eax),%ecx
     96c:       0f b6 00                movzbl (%eax),%eax
     96f:       ba 67 66 66 66          mov    $0x66666667,%edx
     974:       01 c1                   add    %eax,%ecx
     976:       89 c8                   mov    %ecx,%eax
     978:       f7 ea                   imul   %edx
     97a:       c1 fa 02                sar    $0x2,%edx
     97d:       8d 14 92                lea    (%edx,%edx,4),%edx
     980:       01 d2                   add    %edx,%edx
     982:       29 d1                   sub    %edx,%ecx
     984:       89 ca                   mov    %ecx,%edx
        }


*/

//      printk(KERN_EMERG "hook_config----PortMidAddr[hv] = %x\n",PortMidAddr[hv]);
        switch(protocol)
     986:       89 f1                   mov    %esi,%ecx
     988:       80 f9 01                cmp    $0x1,%cl
     98b:       0f 84 8f 00 00 00       je     a20 <FindInsrcPortHashTable+0xc0>
     991:       72 1d                   jb     9b0 <FindInsrcPortHashTable+0x50>
     993:       80 f9 02                cmp    $0x2,%cl
     996:       0f 84 c4 00 00 00       je     a60 <FindInsrcPortHashTable+0x100>
     99c:       80 f9 03                cmp    $0x3,%cl
     99f:       90                      nop
     9a0:       74 46                   je     9e8 <FindInsrcPortHashTable+0x88>
                        {
                                return 0;
                        }
   

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
8 [报告]
发表于 2014-09-11 08:40 |只看该作者
看起来像是传入的data指针不对,再确认下data的相关处理逻辑?

论坛徽章:
0
9 [报告]
发表于 2014-09-11 11:05 |只看该作者
回复 8# humjb_1983


这次问题应该是解决了,就是对于特殊数据包不是TCP、的但是是IPV4的处理中指针地址没有处理,导致强制执行时候会出现指针引用错误问题。谢谢humjb_1983的帮助以及楼上的各位的帮助,还是知识积累不够 ,以及编程不规范造成这些问题的

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
10 [报告]
发表于 2014-09-11 18:49 |只看该作者
ierent168 发表于 2014-09-11 11:05
回复 8# humjb_1983

呵呵,问题解决就满足了。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP