2

カーネル モジュール コードで 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 であることを確認するにはどうすればよいですか?

4

2 に答える 2