首页 > 其他分享 >访问空指针出panic

访问空指针出panic

时间:2023-09-25 11:25:26浏览次数:29  
标签:casa tx knet 00000000 访问 linux 1670595592 panic 指针

panic信息:

<4>[1670581299] 15:Failed on write i2cdev=23(I2CDEV_RFSW0)
<4>[1670581299] 15:tx retry failed
<4>[1670581299] 15:Failed on write i2cdev=23(I2CDEV_RFSW0)
<1>[1670595592] 4:CPU 4 Unable to handle kernel paging request at virtual address 00000040, epc == c00f341c, ra == c00f341c
<4>[1670595592] 4:Oops[#1]:
<4>[1670595592] 4:Cpu 4
<4>[1670595592] 4:$ 0   : 00000000 1000dc00 00000000 00000001
<4>[1670595592] 4:$ 4   : c697f590 1000dc01 8cbfbd74 c6980000
<4>[1670595592] 4:$ 8   : 1000dc01 00000001 00000fff 2002044b
<4>[1670595592] 4:$12   : 00000008 00010000 00000000 01000201
<4>[1670595592] 4:$16   : c00f0000 8cbfbd74 00000000 863769f8
<4>[1670595592] 4:$20   : 00000095 c0100000 c6990000 0089e86c
<4>[1670595592] 4:$24   : 00000008 2baf6e1c                  
<4>[1670595592] 4:$28   : 8cbfa000 8cbfbd18 5c9ef038 c00f341c
<4>[1670595592] 4:Hi    : 00594b2d
<4>[1670595592] 4:Lo    : 502d5d2c
<4>[1670595592] 4:epc   : c00f341c casa_knet_tx_buffer+0x80/0x4d4 [linux_casa_knet]
<4>[1670595592] 4:    Tainted: P         
<4>[1670595592] 4:ra    : c00f341c casa_knet_tx_buffer+0x80/0x4d4 [linux_casa_knet]
<4>[1670595592] 4:Status: 1000dc03    KERNEL EXL IE 
<4>[1670595592] 4:Cause : 1080000c
<4>[1670595592] 4:BadVA : 00000040
<4>[1670595592] 4:PrId  : 000c4003 (XLS616 Rev B1)
<4>[1670595592] 4:Modules linked in: linux_kbp_driver(P) kmod_util(P) kcasalog(P) linux_casa_knet(P) linux_bcm_knet(P) linux_uk_proxy(P) linux_user_bde(P) linux_kernel_bde(P) zbbusctr spi_sc18is602 i2c_xlr
<4>[1670595592] 4:Process ddm_cm_remote_q (pid: 2482, threadinfo=8cbfa000, task=8c9d6058, tls=5c9f7700)
<4>[1670595592] 4:Stack : c00f22cc 1000dc01 8621608c 00789f50 00000000 8cbfbd74 00000000 8cbfbd74
<4>[1670595592] 4:        8cbfbe20 83464c34 c00f2a84 00000006 0000008d c00f3a18 836c0f84 86313df8
<4>[1670595592] 4:        c697f594 8d1ca404 00000018 83698e58 8cbfbae4 1d3879bc 863769f8 00000000
<4>[1670595592] 4:        00000000 00010000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[1670595592] 4:        00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[1670595592] 4:        ...
<4>[1670595592] 4:Call Trace:
<4>[1670595592] 4:[<c00f341c>] casa_knet_tx_buffer+0x80/0x4d4 [linux_casa_knet]
<4>[1670595592] 4:[<c00f3a18>] casa_knet_tx_api_tx+0x1a8/0x340 [linux_casa_knet]
<4>[1670595592] 4:[<c00f1294>] casa_knet_ioctl+0xa4/0xe8 [linux_casa_knet]
<4>[1670595592] 4:[<834d5044>] vfs_ioctl+0x3c/0xf8
<4>[1670595592] 4:[<834d5414>] do_vfs_ioctl+0x314/0x44c
<4>[1670595592] 4:[<834d55a4>] sys_ioctl+0x58/0xc0
<4>[1670595592] 4:[<83402f54>] stack_done+0x20/0x3c
<4>[1670595592] 4:
<4>[1670595592] 4:
<4>[1670595592] 4:Code: 244225e8  0040f809  00000000 <ac520040> ac40003c  ac400000  ac53000c  ac540010  00408021 

我们看Call Trace的最顶层

<4>[1670595592] 4:[<c00f341c>] casa_knet_tx_buffer+0x80/0x4d4 [linux_casa_knet]

0xc00f341c是进程空间里的地址,casa_knet_tx_buffer是此调用函数,这个0x80很重要,是出问题时在函数casa_knet_tx_buffer()中的偏移位置
所以,找到这个位置就ok了

首先查看出问题的时间和linux_casa_knet的改动时间,期间没有别的提交,所以,用现在此时的代码就行

1、用nm命令查看函数casa_knet_tx_buffer()在ko里的位置:

zyc@fish zyc_88x $ mips64-unknown-linux-gnu-nm sdk/build/linux-smm_xls/smm_xls/linux-casa-knet.ko | grep casa_knet_tx_buffer
0000a61c T casa_knet_tx_buffer

注意:要使用适用于目标平台的交叉编译工具链里的nm

2、加上偏移位置
0x0000a61c + 0x80 = 0xa69c

3、addr2line确定位置:

zyc@fish zyc_88x $ /opt/rmi/1.6/mipscross/nptl/bin/mips64-unknown-linux-gnu-addr2line -e sdk/build/linux-smm_xls/smm_xls/linux-casa-knet.ko 0xA69C
/vob/zyc_88x/sdk/systems/linux/kernel/modules/casa-knet/casa-knet-tx.c:897



或者,用objdump出来看看也行

zyc@fish zyc_88x $ /opt/rmi/1.6/mipscross/nptl/bin/mips64-unknown-linux-gnu-objdump -dlS sdk/build/linux-smm_xls/smm_xls/linux-casa-knet.ko > dump.log
    // Get a struct for multiport
    mports = ktx_mport_alloc();
    a68c:       3c020000        lui     v0,0x0
    a690:       24420000        addiu   v0,v0,0
    a694:       0040f809        jalr    v0
    a698:       00000000        nop
/vob/zyc_88x/sdk/systems/linux/kernel/modules/casa-knet/casa-knet-tx.c:914

    // clear out next pointer
    mports->next = NULL;

    // save context
    mports->context = context;
    a69c:       ac520040        sw      s2,64(v0)  # ---- addr:0xa69c
/vob/zyc_88x/sdk/systems/linux/kernel/modules/casa-knet/casa-knet-tx.c:897
        return -1;
    }

    // Get a struct for multiport
    mports = ktx_mport_alloc();
    mports->retry=0;
    a6a0:       ac40003c        sw      zero,60(v0)
/vob/zyc_88x/sdk/systems/linux/kernel/modules/casa-knet/casa-knet-tx.c:911
        casa_knet_swm_packet_io_free_buffer(buffer);
        return -1;
    }

    // clear out next pointer
    mports->next = NULL;
    a6a4:       ac400000        sw      zero,0(v0)
/vob/zyc_88x/sdk/systems/linux/kernel/modules/casa-knet/casa-knet-tx.c:918
    // save context
    mports->context = context;

    // initialize parameter struct to call bcm knet
    tdata = &mports->tx_data;
    tdata->buffer = (uint8_t *)buffer;
    a6a8:       ac53000c        sw      s3,12(v0)
/vob/zyc_88x/sdk/systems/linux/kernel/modules/casa-knet/casa-knet-tx.c:931
        memset(&buffer[length], 0x00, 64 - length);
        length = 64;
    }
#endif

    tdata->length = length;
    a6ac:       ac540010        sw      s4,16(v0)
/vob/zyc_88x/sdk/systems/linux/kernel/modules/casa-knet/casa-knet-tx.c:896
        casa_knet_swm_packet_io_free_buffer(buffer);
        return -1;
    }


源码:

    // Get a struct for multiport
    mports = ktx_mport_alloc();
    mports->retry=0;    // 这里
    //  NULL check
    if (NULL == mports)
    {
        // in case tracing
        DEBUG_FLAP_DROP_TX(buffer, DEBUG_FLAP_DROP_NO_TX_RES);

        CASA_KNET_PRINTK_NON_DEBUG("%s Out of multiport transmit structures, dropping packet\n", __FUNCTION__);
        casa_knet_swm_packet_io_free_buffer(buffer);
        return -1;
    }

标签:casa,tx,knet,00000000,访问,linux,1670595592,panic,指针
From: https://www.cnblogs.com/fallenmoon/p/17727501.html

相关文章

  • JAVA语法&包和访问控制
    目录前言一、Java包概述1.包的简介2.包的语法3.包的命名规则4.JDK类库里的包 5.怎么导包二、访问控制1.访问权限修饰符2.Static关键字作用前言在编写 Java一、Java包概述1.包的简介计算机中存放了若干类型的文档,为了管理方便,操作系统采用了树形结构的文件夹形式存放这些文档,并对......
  • 1787_函数指针的使用
    全部学习汇总:GitHub-GreyZhang/c_basic:littlebitsofc.前阵子似乎写了不少错代码,因为对函数指针的理解还不够。今天晚上似乎总算是梳理出了一点眉目,在先前自己写过的代码工程中做一下测试。先前实现过一个归并排序算法,算法函数的一个传入参数是指向一个比较功能函数的指针。......
  • 锐捷路由直接通过NAT访问猫棒
    拓扑目的:直接访问192.168.1.10g0/0/1口为华为猫棒,自动配置192.168.1.10为后台g0/0/2口为电脑直连原理因为路由每个口只能分配一个网段,不能与猫棒作为同一网段,所以必须做NAT转换。命令路由为锐捷RSR-30-X(V1.5)g0/0/1口配置Ruijie#conftRuijie(config)#intg......
  • Http访问格式刨析
    *概念:HyperTextTransferProtocol超文本传输协议*传输协议:定义了,客户端和服务器端通信时,发送数据的格式 参考火狐浏览器,其它浏览器没找到*特点:1.基于TCP/IP的高级协议2.默认端口号:803.基于请求/响应模型的:一次请求对应一次响应4.无状态的:每次请求之间相互......
  • flask框架在Centos正常启动后到Windows浏览器访问(http://192.168.124.129:5550/)提示无
    1、flask在centos正常启动 2、然后复制链接到window访问,提示无法访问3、排查下,Linux和Windows互相ping下WindowpingLinuxIP LinuxpingWindowIP如上能够正常ping通,说明网段是正常的4、再排查下,Linux是不是防火墙没有关闭查看防火墙状态命令:systemctlstatusfir......
  • int (*s[10]) (int);含义,函数指针。
    问题int(*s[10])(int);含义是什么?答案是一个包含10个函数指针的数组的声明。示例一般情况看到的函数指针如下:intfun1(int);//这是一个函数声明int(*pf)(int);//声明了一个函数指针pf=fun1;//将函数的地址赋值给pf。这里的函数指针仅有一个pf,而问题中是用数组存放函......
  • crash —— 如何知道哪些数据结构内嵌了指定的数据结构或者内嵌了指向指定数据结构的
    需求有时我们有这样的需求,比如我们知道了结构体task_struct,然后我们又想知道内核中有哪些数据结构中包含了task_struct,或者包含了指向task_struct的指针。做法用whatis-m可以做到:crash>whatis-mtask_structSIZETYPE8rcuwait16core_thread16io_......
  • Go指针探秘:深入理解内存与安全性
    Go指针为程序员提供了对内存的深入管理能力,同时确保了代码的安全性。本文深入探讨了Go指针的基础概念、操作、深层理解及其特性与限制。通过深入了解其设计哲学和应用,我们可以更好地利用Go的强大功能。关注公众号【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作......
  • 用户和组账号概述 Linux基于用户身份对资源访问进行控制 用户帐号: 超级用户root、普
    用户和组账号概述Linux基于用户身份对资源访问进行控制用户帐号:超级用户root、普通用户、程序用户超级用户,即root用户,类似于Windows系统中的Administrator用户,非执行管理任务时不建议使用root用户登录系统普通用户帐号一般只在用户自己的宿主目录中有完全权限程序用户:用于......
  • 记录--a标签跳转新地址无法访问,但手动输入新地址可以访问
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助问题描述最近遇到一个有意思的问题,项目中有一个地方,点击需要跳转到一个新的域名地址笔者使用a标签做跳转,跳是跳过去了,可是跳过去以后,反而打不开了,显示403佛伯乐蛤?大致这样的代码:<ahref="http://abcdefg.com......