在处理内核模块代码中的 sk_buff 时,我看到许多代码示例使用
(struct iphdr *)skb_network_header(skb) //skb is an instance of (struct sk_buff*)
或实际上相同的函数 ip_hdr() (调用 skb_network_header 和强制转换)。这安全吗?如果我们对 sk_buff 的来源没有任何假设,是否可以进行检查以确保网络协议确实是 IP?
编辑:可能有一个 sk_buff 唯一可能的网络协议是 IP,但我仍然希望看到一个“证明”或解释。例如,如果我在 Linux 内核中实现自己的协议并且网络协议标头可能是别的东西怎么办?如何确保网络传输协议确实是 IP?