在内核模块上使用kfree

时间:2012-10-06 19:59:33

标签: memory-management kernel kernel-module

下午好的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;

这导致了段错误。我想也许是因为我在解锁之前无法释放,所以我继续将互斥锁解锁到顶部(如更大的代码部分所示),并且只是说“被杀”。我做错了什么?

1 个答案:

答案 0 :(得分:1)

很抱歉迟到的回复。

从查看代码我可以这么说。

ksymbol = find_symbol(sym, &mod, NULL, true, false);

您正在分配常量。这可能会导致错误。

但是否则你可以发布错误。