免费注册 查看新帖 |

Chinaunix

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

[内核模块] 关于拦截系统调用 [复制链接]

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-29 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-01-10 10:54 |只看该作者 |倒序浏览
我现在碰到一个问题,就是比如拦截了write的系统调用,那么在我卸载我的内核模块的时候,经常会出现系统当机的情况,但是只是随机出现,而且我的代码在拦截函数里没有做任何操作,是直接返回的,咨询了相关系统工程师,说是内核有地方可能引用了我的劫持函数指针,在驱动卸载完成后,扔然继续使用,所以导致出现panic,请问一下,如果这样,那该如何解决呢?

论坛徽章:
11
程序设计版块每日发帖之星
日期:2015-09-09 06:20:00CU十四周年纪念徽章
日期:2016-05-16 11:11:112016科比退役纪念章
日期:2016-05-04 17:16:57程序设计版块每日发帖之星
日期:2016-02-20 06:20:00程序设计版块每周发帖之星
日期:2015-11-06 19:30:58程序设计版块每日发帖之星
日期:2015-09-12 06:20:00程序设计版块每日发帖之星
日期:2015-09-11 06:20:00每日论坛发贴之星
日期:2015-09-10 06:20:00程序设计版块每日发帖之星
日期:2015-09-10 06:20:00每日论坛发贴之星
日期:2015-09-09 06:20:0015-16赛季CBA联赛之四川
日期:2016-12-15 15:52:10
2 [报告]
发表于 2017-01-10 16:01 |只看该作者
本帖最后由 我爱你我的菜 于 2017-01-10 16:13 编辑

帮顶!!!!!

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
3 [报告]
发表于 2017-01-12 13:18 |只看该作者
贴代码

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-29 06:20:00
4 [报告]
发表于 2017-01-13 14:17 |只看该作者
不是代码的问题,我的意思是比如我拦截了write系统调用,在init的时候,将我自己的处理函数地址syscall_table[__NR_write] = (long*)my_write,然后在我模块exit的时候在恢复原系统调用,但是这样的话,就会出现我在exit的时候,有些程序的write的调用还处在我自己的write函数里,而我的模块这个时候退出了,那个地址就失效了,这样就会导致系统panic,可是我也没有办法通过互斥来解决这个问题,所以请教各位有没有别的办法?

论坛徽章:
0
5 [报告]
发表于 2017-01-13 16:50 |只看该作者
my_write加个rcu试试。
然后rmmod时候synchroinzed_rcu看看有么有用。

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-29 06:20:00
6 [报告]
发表于 2017-01-17 17:35 |只看该作者
谢谢楼上,我有一些疑问,首先我只能修改我自己的模块,但是sys_write的调用涉及到全局的系统调用查找表  这个我没有办法加锁保护,只能在sys_write里面加锁,但是在rmmod的时候我却要修改的是全局的系统调用表指针,也就是我没有办法保证在我rmmod的时候仍然有进程会调用老的sys_write吧。
另外这个rcu锁是如何保证在所有的cpu都经历了一次进程切换之后,就可以操作临界区了?就是说他如何保证在操作临界区的时候别的cpu不会进行第2次切换?说白了就是他在写的时候如何确保没有人在读?

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-29 06:20:00
7 [报告]
发表于 2017-01-17 19:09 |只看该作者
这样貌似不行,因为当你调用synchroinzed_rcu的时候,虽然在sys_write里面加了锁,但是不能阻止其他进程这个时候进入sys_write函数。

论坛徽章:
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
8 [报告]
发表于 2017-01-20 10:56 |只看该作者
PS,模块卸载路径上synchronize_rcu也是不充分的。

忘记Paul McKenny的原文了,参考一下下面的链接吧。
http://markmail.org/message/wuweflxngoyrr2ps

论坛徽章:
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
9 [报告]
发表于 2017-01-20 10:56 |只看该作者

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-29 06:20:00
10 [报告]
发表于 2017-01-24 09:24 |只看该作者
谢谢nswcfd大兄弟,我看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP