Race:在OSX中卸载kext期间回调并删除回调

时间:2016-06-28 19:29:41

标签: macos kernel xnu kernel-extension

在建立/删除回调(例如kauth_unlisten_scope)和回调本身之间似乎没有同步(在xnu代码库中,是的,我知道,它已过时)。这会带来跟踪/消耗回调以及与扩展本身上的调用同步的负担。但这也是有问题的,因为有一个窗口注意到一个线程已退出回调并实际返回扩展代码。

是否有任何模式可以正确避免这场比赛?或者,Apple是否有任何文档表明他们已正确同步?

1 个答案:

答案 0 :(得分:1)

据我所知,没有100%可靠的方法可以阻止kauth回拨注销竞争条件; API设计得很糟糕。 Apple自己实现/推荐一种简单的基于原子计数器的机制,您可以在Kauth-O-Rama example中看到。在 KauthORama.c 源文件中搜索gActivationCount。线程在增量之前或在回调减少之后运行代码的可能性仍然很小,但我从未见过由此引起的崩溃。