下午好 SO-
第一次使用 kmallocs 和 kfrees,我遇到了错误。
struct module* mod;
const struct kernel_symbol* ksymbol;
ksymbol = kmalloc(sizeof(struct kernel_symbol), GFP_KERNEL);
if(!sym | !dst | (dst_sz <= 0)) return -EFAULT;
mutex_lock(&module_mutex);
mod = (struct module*)kmalloc(sizeof(struct module), GFP_KERNEL);
ksymbol = find_symbol(sym, &mod, NULL, true, false);
if(!mod){
for(i = 0; i < dst_sz; i++) dst[i] = '\0';
mutex_unlock(&module_mutex);
kfree(ksymbol);
kfree(mod);
return SUCCESS;
}
我还有其他情况(!mod 用于将模块内置到内核中),但是为什么会产生错误?一开始我有...
kfree(ksymbol);
kfree(mod);
mutex_unlock(&module_mutex);
return SUCCESS;
这导致了段错误。我想可能是因为我在解锁之前无法释放,所以我继续将互斥锁解锁放在顶部(如更大的代码部分所示),这只是说“Killed”。我做错了什么?