请看代码片段

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");
}

代码是从linux netfilter hook函数中提取的,这意味着ip_hdr->saddr可能属于内核空间内存,我非常确定ip_hdr指向有效内存。仍然不知道问题是什么,所以请帮助我。
提前谢谢!

最佳答案

好吧,这是你的问题:

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

这将源IP地址解释为指针。你想做的是:
memcmp(&ip_hdr->saddr, ...)

关于linux - netfilter钩子(Hook)函数内存引用使我的系统崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10260071/

10-12 22:39