Ссылка на функцию ловушки 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, ...)