4

Linuxカーネル用のモジュールを書いていますが、パケットとそれに関連するsk_buffを盗もうとしています。そのためには、 & を使用して、パケットがドロップstruct sk_buff *skb_copy(const struct sk_buff *skb, gfp_t gfp_mask)されるときに戻り値の型をカーネルに渡します。

そのため、カーネルがパケット ドロップに関する情報を取得すると、sk_buff を解放しようとします。ここで私の質問が来ますそれは私の新しくコピーされたskbとそのパケットのポイントされたデータに影響しますか? または今、私は新しい sk_buff で遊ぶことができますか?

または、skb_clone()を使用して、パケットのコピー コストを削減するため、古い sk_buff で参照されたデータを削除せずにパケット データ部分を使用することは可能ですか。

4

1 に答える 1

5

を使用すると、 とパケットのskb_copy両方が新しいメモリにコピーされます。sk_buffつまり、カーネルがもう一方を解放しても、コピーは影響を受けません。

skb_clone一方、sk_buff構造体を新しいメモリにコピーしますが、パケットはコピーしません。つまり、古いものが解放されると、コピーのパケットも解放されます。

ここにいくつかのリンクがあります:

于 2012-11-08T17:41:20.477 に答える