Использование 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);
Вы назначаете на постоянную. что может привести к ошибке.
Но в противном случае вы можете опубликовать ошибку.