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 回答