这个问题主要是由于在nf_register_hook回调函数中调用netlink来向用户程序发送消息时间接调用alloc_skb的参数不正确导致的。
alloc_skb 应该使用 GFP_ATOMIC,而不是GFP_KERNEL。
用来从中断处理和进程上下文之外的其他代码中分配内存. 从不睡眠.
内核内存的正常分配. 可能睡眠.
而NF_INET_PRE_ROUTING运行在中断环境,GFP_KERNEL引起睡眠就会导致上述问题。
这个问题主要是由于在nf_register_hook回调函数中调用netlink来向用户程序发送消息时间接调用alloc_skb的参数不正确导致的。
alloc_skb 应该使用 GFP_ATOMIC,而不是GFP_KERNEL。
用来从中断处理和进程上下文之外的其他代码中分配内存. 从不睡眠.
内核内存的正常分配. 可能睡眠.
而NF_INET_PRE_ROUTING运行在中断环境,GFP_KERNEL引起睡眠就会导致上述问题。