免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: kouu
打印 上一主题 下一主题

剖析一个由sendfile引发的linux内核BUG [复制链接]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
31 [报告]
发表于 2010-01-16 19:27 |只看该作者
原帖由 W.Z.T 于 2010-1-16 17:03 发表


我自己build的一个2.6.18系统, 测试是可以的。 mmap_min_addr在禁用selinux后就没用了吧。 我没在相关代码中看到有禁止映射0地址的操作。


我测试的那个环境,禁用SELinux后,mmap_min_addr还是有的

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
32 [报告]
发表于 2010-01-16 19:27 |只看该作者
对了,mmap_min_addr这个变量对应的内核操作代码在那里

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
33 [报告]
发表于 2010-01-16 20:10 |只看该作者


  1. 27 /*      
  2. 28  * sysctl handler which just sets dac_mmap_min_addr = the new value and then
  3. 29  * calls update_mmap_min_addr() so non MAP_FIXED hints get rounded properly
  4. 30  */
  5. 31 int mmap_min_addr_handler(struct ctl_table *table, int write,
  6. 32               void __user *buffer, size_t *lenp, loff_t *ppos)
  7. 33 {
  8. 34     int ret;
  9. 35
  10. 36     if (!capable(CAP_SYS_RAWIO))
  11. 37         return -EPERM;
  12. 38               
  13. 39     ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos);
  14. 40     
  15. 41     update_mmap_min_addr();
  16. 42
  17. 43     return ret;
  18. 44 }
  19. 45
  20. 46 static int __init init_mmap_min_addr(void)
  21. 47 {
  22. 48     update_mmap_min_addr();
  23. 49
  24. 50     return 0;
  25. 51 }

复制代码

莫非是这里?

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
34 [报告]
发表于 2010-01-16 20:11 |只看该作者
还有,2.6.33-rc4,貌似跑不了这个例子

论坛徽章:
0
35 [报告]
发表于 2010-01-16 20:34 |只看该作者
原帖由 Godbach 于 2010-1-16 19:27 发表


我测试的那个环境,禁用SELinux后,mmap_min_addr还是有的


你安装的系统是默认安装和启动了selinux吧, 安装selinux就会在/proc目录下有mmap_min_addr文件。 关闭selinux之后这个还是应该存在的吧, 只是失效了而已。

论坛徽章:
0
36 [报告]
发表于 2010-01-16 20:36 |只看该作者
原帖由 Godbach 于 2010-1-16 19:27 发表
对了,mmap_min_addr这个变量对应的内核操作代码在那里


标准内核是在2.6.26以后才被加进selinux里, redhat的系统不是标准内核, 估计他们打了相关的补丁。

论坛徽章:
0
37 [报告]
发表于 2010-01-16 20:40 |只看该作者
原帖由 T-Bagwell 于 2010-1-16 20:10 发表


27 /*      
28  * sysctl handler which just sets dac_mmap_min_addr = the new value and then
29  * calls update_mmap_min_addr() so non MAP_FIXED hints get rounded properly ...


2.6.30以后的内核才有这个函数吧?

论坛徽章:
0
38 [报告]
发表于 2010-01-16 20:41 |只看该作者
原帖由 T-Bagwell 于 2010-1-16 20:11 发表
还有,2.6.33-rc4,貌似跑不了这个例子


这个BUG早就补了吧~

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
39 [报告]
发表于 2010-01-16 20:55 |只看该作者
原帖由 W.Z.T 于 2010-1-16 20:41 发表


这个BUG早就补了吧~

是啊,所以玩起来费劲了

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
40 [报告]
发表于 2010-01-16 21:42 |只看该作者
原帖由 W.Z.T 于 2010-1-16 20:34 发表


你安装的系统是默认安装和启动了selinux吧, 安装selinux就会在/proc目录下有mmap_min_addr文件。 关闭selinux之后这个还是应该存在的吧, 只是失效了而已。


对,默认安装和启动了SElinux,后来关闭的。

不过感觉我的几个环境有点区别,都是RHEL5.2,开始装的是都应该启动了SElinux,但是两个测试环境中都没有了mmap_min_addr文件
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP