netfilter钩子函数内存引用崩溃了我的系统

时间:2012-04-21 14:59:51

标签: linux memory pointers kernel memcmp

请查看代码段

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钩子函数中提取的,这意味着 ip_hdr-> saddr 可能属于内核空间内存,我很确定ip_hdr指向有效内存。仍然不知道问题是什么,所以请帮助我。

提前感谢!

1 个答案:

答案 0 :(得分:1)

嗯,这是你的问题:

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

这将源IP地址解释为指针。你想做的是:

memcmp(&ip_hdr->saddr, ...)