Когда я добавляю элемент в мою хэш-таблицу, он вызывает сбой в ядре системы, и я не могу выяснить причину этого.
Я пишу некоторый код, чтобы выполнить анализ сетевого пакета врежим ядра и хранение статистической информации в структуре о каждом потоке пакетов, проходящих мой анализатор.
Моя хеш-таблица определяется с помощью:
DEFINE_HASHTABLE(flow_dictionary, 10);
и позже инициализируется с помощью:
hash_init(flow_dictionary);
Моя структура данных определяется с помощью
struct flow_action_head {
unsigned int flowID;
/* Mode of operations */
SELECTION_MODE sampling_mode;
SELECTION_MODE normalization_mode;
/* Statistics */
unsigned int numberPackets;
unsigned int timeFirstPacket;
unsigned int timeLastPacket;
unsigned int packetsReceived;
unsigned int packetsProcessed;
/* Pointer to action details */
nas_t* next;
/* Required for linked hash list */
struct hlist_node hash_list;
}; // __attribute__((packed));
В функции, которую я выполняю:
void map_add_flow(unsigned int flowID) {
struct flow_action_head* fah;
fah = (struct flow_action_head*) kzalloc(sizeof(struct flow_action_head), GFP_ATOMIC);
fah->flowID = flowID;
fah->sampling_mode = SMODE_COUNT_BASED;
fah->normalization_mode = NMODE_TTL;
fah->numberPackets = 1;
fah->timeFirstPacket = 0;
fah->timeLastPacket = 0;
fah->packetsReceived = 0;
fah->packetsProcessed = 0;
fah->next = NULL;
hash_add(flow_dictionary, &fah->hash_list, flowID);
}
, как только я нажму hash_add
, система выйдет из строя.
Я ожидаю, что она просто добавит запись в хеш-таблицу flow_dictionary
используя flowID
в качестве ключа.Я не могу понять, почему это сломало бы этот пункт.Структура, кажется, в порядке, и я могу читать / записывать каждое значение структуры flow_action_head
.