Ссылка на функцию ловушки netfilter сломала мою систему

Пожалуйста, посмотрите на фрагмент кода

char ipAddr[] = {192, 168, 88, 2};
struct iphdr *ip_hdr = (struct iphdr*)(some_valid_eth_hdr_pointer + 1);
if (0 == memcmp((void*)(ip_hdr->saddr), (void*)ipAddr, 4)) /*memcmp cause my whole system crashed*/
{
    printk("ip source addr matched\n");
}

код извлекается из функции ловушки netfilter в linux, что означает, что ip_hdr->saddr может принадлежать памяти пространства ядра, и я уверен, что ip_hdr указывает на допустимую память. до сих пор не знаю, в чем проблема, поэтому, пожалуйста, помогите мне.

заранее спасибо!

1 ответ

Решение

Ну, вот твоя проблема:

memcmp((void*)(ip_hdr->saddr), ...

Это интерпретирует исходный IP-адрес как указатель. То, что вы хотели сделать, это:

memcmp(&ip_hdr->saddr, ...)
Другие вопросы по тегам