linux - netfilter Hook 函数内存引用使我的系统崩溃

标签 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钩子(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/

相关文章:

java - 线程消耗的内存

c++ - C++ 中删除运算符的 'destroying' 内存是什么意思?

C# 指针引用

linux - Fifos 和交互式命令 (gpg)

c# - 包装 C++ 对象以用于 C# PInvoke 时的析构函数执行

linux - PCIe NIC 如何工作以及它如何与主机通信?

c - 带字符串赋值的数组对象指针会导致崩溃

c - 连续声明的变量的内存地址顺序是否总是降序?

linux - 无法附加到运行 Docker 容器的 bash

linux - 如何知道写时复制页面是否是实际副本?