在kext中调用proc_rele()时,OS X中的内核死机
我有一个内核恐慌,不知道为什么 在OS X 10.11.3的内核扩展中,哪些条件可能导致以下函数崩溃,从而导致死机在kext中调用proc_rele()时,OS X中的内核死机,c,macos,kernel,darwin,kernel-extension,C,Macos,Kernel,Darwin,Kernel Extension,我有一个内核恐慌,不知道为什么 在OS X 10.11.3的内核扩展中,哪些条件可能导致以下函数崩溃,从而导致死机 static int parent_pid(int pid) { int ppid = 0; proc_t process = proc_find(pid); if (process) { ppid = proc_ppid(process); proc_rele(process); } return ppid;
static int parent_pid(int pid) {
int ppid = 0;
proc_t process = proc_find(pid);
if (process) {
ppid = proc_ppid(process);
proc_rele(process);
}
return ppid;
}
恐慌发生在proc_rele()
内部,它依次称为\u lck\u mtx\u lock
。据我所知,这里使用的proc\u rele()
是绝对正确的。在整个kext中没有其他调用proc\u find()
或proc\u self()
,因此原因不应该是代码中其他地方缺少proc\u rele()
是否有一些我没有考虑过的比赛条件或线程问题?例如,我是否需要使用锁来保护对
proc\u find()
/proc\u rele()
的调用?看起来不错。我怀疑您真正的bug在其他地方——可能是代码中其他地方的过度发布,或者内存覆盖。各种公共的proc.*
KPI已经为您完成了所有必要的锁定。如果找不到问题,请在问题中添加更多与程序相关的代码。我觉得很好。我怀疑您真正的bug在其他地方——可能是代码中其他地方的过度发布,或者内存覆盖。各种公共的proc.*
KPI已经为您完成了所有必要的锁定。如果找不到问题,请从kext中添加更多与proc相关的代码。