Использование kfree на модулях ядра

Добрый день

Первый раз использую 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;
}

У меня есть другие случаи (! Мод для когда модуль встроен в ядро), но почему это вызывает ошибки? Сначала я имел...

  kfree(ksymbol);
  kfree(mod);
  mutex_unlock(&module_mutex);
  return SUCCESS;

И это привело к segfaults. Я подумал, может быть, это потому, что я не могу освободиться, прежде чем разблокировать, поэтому я пошел вперед и поставил мьютекс-разблокировку вверху (как показано в большем разделе кода), и это просто говорит "Killed". Что я делаю неправильно?

1 ответ

Решение

Извините за поздний ответ.

От просмотра вашего кода я могу сказать это.

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

Вы назначаете на постоянную. что может привести к ошибке.

Но в противном случае вы можете опубликовать ошибку.

Другие вопросы по тегам