免费注册 查看新帖 |

Chinaunix

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

nat->ct 会为空吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-10 20:09 |只看该作者 |倒序浏览
在find_appropriate_src 中
hlist_for_each_entry_rcu(nat, n, &net->ipv4.nat_bysource[h], bysource) {
                ct = nat->ct;
发现ct为NULL。

阅读了下释放连接跟踪的代码发现,这个值不可能为空啊。
释放连接跟踪是对nat操作加了读锁,这里的find操作也加了读锁。

有人遇到相似的问题了吗?

论坛徽章:
2
申猴
日期:2013-12-26 22:11:31天秤座
日期:2014-12-23 10:23:19
2 [报告]
发表于 2011-11-10 21:09 |只看该作者
宕机了?
LZ什么环境?

论坛徽章:
0
3 [报告]
发表于 2011-11-11 09:00 |只看该作者
是啊,宕机了,做snat时候宕了,不过很久才宕一次,很蛋疼。

论坛徽章:
2
申猴
日期:2013-12-26 22:11:31天秤座
日期:2014-12-23 10:23:19
4 [报告]
发表于 2011-11-11 09:02 |只看该作者
什么内核版本?修改过内核吗?

论坛徽章:
0
5 [报告]
发表于 2011-11-11 09:37 |只看该作者
2.6.3*的,修改过。
刚才跟了下代码,感觉这个地方有可能为NULL吧?
nat模块卸载的时候会对nat进行memset 0操作。
clean_nat中。
在nf_ct_iterate_cleanup的get_next_corpse中加的是自旋锁,最后调用iter(ct, data)
对nat的内容清空。
此时,如果刚好有一连接的hash值跟这个被清空nat的hash值冲突的话,在调用find_appropriate_src
时的 nat->src且不是空的吗?

论坛徽章:
2
申猴
日期:2013-12-26 22:11:31天秤座
日期:2014-12-23 10:23:19
6 [报告]
发表于 2011-11-11 15:27 |只看该作者
你那里多长时间会出来一次?
看代码是有问题的

  1. static void __net_exit nf_nat_net_exit(struct net *net)
  2. {
  3.         nf_ct_iterate_cleanup(net, &clean_nat, NULL); //1
  4.         synchronize_rcu();
  5.         nf_ct_free_hashtable(net->ipv4.nat_bysource, net->ipv4.nat_vmalloced,
  6.                              net->ipv4.nat_htable_size);//3
  7. }
复制代码
如果要是在代码1和代码3之间调用find_appropriate_src就会有问题

论坛徽章:
0
7 [报告]
发表于 2011-11-11 16:15 |只看该作者
非常感谢楼上兄弟鼎力相助。
不过貌似你应该不熟悉这块代码流程。
理论上来说这里可能是有问题,但是前提是基于nat模块卸载的时候才会出现。

论坛徽章:
2
申猴
日期:2013-12-26 22:11:31天秤座
日期:2014-12-23 10:23:19
8 [报告]
发表于 2011-11-11 16:32 |只看该作者
额...
哪里说的不对请指教...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP