Доброе утро!
У меня возникла ошибка при очистке памяти, с помощью функции kfree
Сейчас коротко опишу проблему.
Есть структура: (будем считать что создана структура с именем I_struct и I_struct_ptr указатель на данную структуру)
struct I_struct
{
char *var_1;
char *var_2;
char *var_3;
}
И я выделяю память в ядре, вот так..
I_struct_ptr->var_1 = kmalloc( 4096 ,GFP_ATOMIC); // 4096 Эт просто пример
И такое выделение памяти осуществляется для каждой переменной данной структуры.Кстати говоря, одна из этих переменных может быть равна NULL , что значит, что для неё либо память не выделялась, либо kmalloc вернуло ошибку.
Далее у меня есть некая функция очистки выделенной памяти inline void i_func
inline void i_func(struct I_struct *I_struct_ptr)
{
if(I_struct_ptr == NULL) return;
if(I_struct_ptr->var_1 != NULL ) kfree(I_struct_ptr->var_1);
if(I_struct_ptr->var_2 != NULL ) kfree(I_struct_ptr->var_2);
if(I_struct_ptr->var_3 != NULL ) kfree(I_struct_ptr->var_3);
return; }
После вызова этой функции очистки! вылетает вот такой OOOps
kernel BUG at mm/slub.c:2969!
Apr 6 10:02:50 localhost kernel: invalid opcode: 0000 [#1] SMP
Apr 6 10:02:50 localhost kernel: last sysfs file: /sys/devices/pci0000:00/0000:00:0d.0/host0/target0:0:0/0:0:0:0/block/sda/sda1/uevent
Ошибка происходит при попытке очистить переменную I_struct_ptr->var_2 .
Почему вылетает OOps? как поправить? )