免费注册 查看新帖 |

Chinaunix

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

[内核模块] 紧急求助 [复制链接]

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-29 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-12-30 11:49 |只看该作者 |倒序浏览
我现在写的一段内核代码,一运行就会当机,但是只是在某一个内核的suse上会这样,在大多数是没问题的,实在找不到解决办法,请各位高人帮忙看看,非常感谢!代码如下:
int test (struct file *pst_File)
{
        int res = -1;
        char *ac_Buf= NULL;
    char * pc_FdName = NULL;
    char file_path[PAGE_SIZE + 1] = {0};

    ac_Buf = kmalloc(PAGE_SIZE, GFP_ATOMIC);
    if (!ac_Buf)
         return -1;


    {
            pc_FdName = d_path(&(pst_File->f_path), ac_Buf, PAGE_SIZE);

        if (NULL != pc_FdName)
        {
                    memset(file_path, 0 , PAGE_SIZE);
                strncpy(file_path, pc_FdName, PAGE_SIZE);
                res = 0;
        }
        else
        {
                res = -1;
        }

    }
    kfree(ac_Buf);
    return res;

}

目的就是通过文件fd来获取到这个文件的全路径。

论坛徽章:
1
15-16赛季CBA联赛之新疆
日期:2017-03-09 12:33:45
2 [报告]
发表于 2016-12-30 12:14 |只看该作者
回复 1# sky__sea

你犯了一个严重问题,就是在内核栈上不能分配太大的内存,你一下子就分配了一个PAGE_SIZE的内容,而内核栈只有2 PAGE_SIZE,而且还有很多的task_struct的信息,这个实在太大了。所以,你把这个修改了,估计就好了,把这个在堆上分配就行了。
提醒一下,用论坛的代码写,要不然看起来真的很费劲。

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
3 [报告]
发表于 2016-12-30 12:15 |只看该作者
可以检查一下这几个函数除了NULL之外是不是还会返回其它的error,例如-ENOMEM啥的

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-29 06:20:00
4 [报告]
发表于 2016-12-30 14:29 |只看该作者
strncpy(file_path, pc_FdName, PAGE_SIZE);
我把这一行注释掉,就没有问题,加上就一定有问题,刚才我吧char file_path[PAGE_SIZE + 1] = {0};的大小定义改成10个字节,是没问题了,可是改成20个字节有不行,20个字节很小了吧,也不行,到底问题是在哪里,strncpy这一行怎么看都没有问题啊,另外,请教一下,根据fd获取文件的全路径,你们是怎么获取的呢?

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-29 06:20:00
5 [报告]
发表于 2016-12-30 15:02 |只看该作者
我把file_path改成动态分配,真的不会当机了,可是为什么我静态分配20个字节就不行呢,堆栈应该还够用吧,我发现造成当机是因为非常频繁的调用这个函数,这个有什么关系?动态分配的话,是不是会影响效率,有大小限制吗?
再次谢谢楼上大神的帮助!

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
6 [报告]
发表于 2016-12-30 20:05 |只看该作者
本帖最后由 nswcfd 于 2016-12-30 20:10 编辑

2楼说到点上了,是kernel stack大小的约束。

PS,strncpy的第三个参数一直是PAGE_SIZE么,还是有所调整(比如10或者20)?

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
7 [报告]
发表于 2016-12-30 20:20 |只看该作者
可以统计一下当函数test被调用的时候,典型的sp的值分布(后13位即可),看看是不是离8k的边缘很近了。

论坛徽章:
224
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:1015-16赛季CBA联赛之四川
日期:2023-07-25 16:53:45操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
8 [报告]
发表于 2016-12-30 20:45 |只看该作者
论坛有code标签的,我bash记录都直接贴的,看起来舒服感不一样

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-29 06:20:00
9 [报告]
发表于 2017-01-05 15:58 |只看该作者
还是有问题,搞内核模块真痛苦,经常是这个环境不出问题,到另一个环境就崩溃,更郁闷的是没有任何系统日志,根本不知道哪里出的问题。我如果都改成kmalloc申请,也会崩溃,搞不清楚内核对内存有什么限制,申请的过于频繁是不是也会有问题?

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-29 06:20:00
10 [报告]
发表于 2017-01-05 16:02 |只看该作者
我申请的也不大,也就1,200个字节。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP