免费注册 查看新帖 |

Chinaunix

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

[内存管理] 熟悉内管理的TX指点一下put_page [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-31 14:20 |只看该作者 |倒序浏览
我的系统偶尔会在kfree_skb时panic,主要是不正确的skb分段地址造成的:
  1. Jul 31 11:46:06 AnShion <12> klogd: [61838.586486] EIP is at put_page+0x3/0x40
  2. Jul 31 11:46:06 AnShion <12> klogd: [61838.632203] EAX: 2f3c0a3e EBX: 00000001 ECX: f30baee4 EDX: 2f3c0a3e
  3. Jul 31 11:46:06 AnShion <12> klogd: [61838.706953] ESI: f359dc00 EDI: f359dc00 EBP: ed5cbe88 ESP: ed5cbe78
  4. Jul 31 11:46:06 AnShion <12> klogd: [61838.781702]  DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
  5. Jul 31 11:46:06 AnShion <8> klogd: [61838.846087] Process kworker/1:2 (pid: 22735, ti=ed5ca000 task=f299e400 task.ti=ed5ca000)
  6. Jul 31 11:46:06 AnShion <8> klogd: [61838.942606] Stack:
  7. Jul 31 11:46:06 AnShion <12> klogd: [61838.966554]  ed5cbe88 c069dc34 f359dc00 f35c1080 ed5cbe94 c069d7f2 f30bae00 ed5cbeac
  8. Jul 31 11:46:06 AnShion <12> klogd: [61839.059759]  c069d93a c06bd1e5 f30bae00 f35c1080 f30bae5c ed5cbeb8 c06bd1e5 f30bae00
  9. Jul 31 11:46:06 AnShion <12> klogd: [61839.152962]  ed5cbed0 c06bd4f8 c0b30cc0 00000002 c184a000 c184a000 ed5cbef8 c06bd9aa
  10. Jul 31 11:46:06 AnShion <8> klogd: [61839.246165] Call Trace:
  11. Jul 31 11:46:06 AnShion <12> klogd: [61839.275303]  [<c069dc34>] ? skb_release_data+0x84/0xa0
  12. Jul 31 11:46:06 AnShion <12> klogd: [61839.336574]  [<c069d7f2>] __kfree_skb+0x12/0x90
复制代码
想请教一下,如果我想在put_page调用之前校验一下page的地址的合法性,内核有现成的接口吗?我使用IS_ERR_OR_NULL似乎不够!!!

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
2 [报告]
发表于 2012-08-01 20:25 |只看该作者
纯帮顶!

论坛徽章:
0
3 [报告]
发表于 2012-11-09 14:04 |只看该作者
lZ的问题解决没有?能否共享一下解决办法

论坛徽章:
0
4 [报告]
发表于 2012-11-12 16:05 |只看该作者
后来找到原因,是因为skb buffer溢出了。现在也没有找到溢出的原因,暂时做了一个检查,溢出的就让它挂在那里了。

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
5 [报告]
发表于 2012-11-13 07:16 |只看该作者
回复 4# 独孤九贱
skb buffer溢出,是指存储的内容超过了skb但是申请的大小吗?
   

论坛徽章:
0
6 [报告]
发表于 2012-11-13 09:12 |只看该作者
不是,是前面buffer部份溢出了,把后面部份给覆盖了,原因未知:
  1. Nov  1 14:55:03 AnShion <14> klogd: [3087672.029339] [NF_HONEYPOT] Capture bogus skb, hooknum:0, error code 2, total 704366, indev eth3, drop it.
  2. Nov  1 14:55:03 AnShion <14> klogd: [3087672.029341] [NF_HONEYPOT] skb bogus:
  3. Nov  1 14:55:04 AnShion <14> klogd: [3087672.029342] [NF_HONEYPOT] data ptr = ef39684e, data tail = ef396e79, length = 1579, data length = 0.
  4. Nov  1 14:55:04 AnShion <14> klogd: [3087672.029343] [NF_HONEYPOT] nf_frags = 54528, gso size = 474, gso type = 0
  5. Nov  1 14:55:04 AnShion <14> klogd: [3087672.029345] [NF_HONEYPOT] IP 220.169.4.23->221.235.204.216 proto 17 tot_len 1579
复制代码
上面是捕获到的报文,data length为0,即是线性的,但是nf_frags和gso却有可能是一个随机值,所以在释放skb的时候,就会出错。这个问题困绕我很久了,报文是在netfilter prerouting的最高优先级处拿到的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP