释放克隆的skb(使用skb_clone)会释放原始skb吗?

fas*_*sha 5 linux kernel linux-kernel

我想将 skb buff 放入多个队列中。所以我想到使用克隆选项。现在我的问题是,如果我在克隆的skb上执行 kfree_skb ,它会释放原始 skb,还是只删除一个引用?

谢谢!

Gya*_*pta 2

当克隆 skb 时,会为克隆的 sk_buff 分配新的内存,并且struct sk_buff克隆的所有成员都是克隆私有的。然而,数据即数据包在原始SKB 和它的克隆之间共享。因此sk_buff结构仅被复制到新内存。如果释放原始 skb,如果 dataref 计数为零,则数据将丢失。这里的数据是你的数据包。

如果您不想在释放任何 skb 时丢失数据,请使用:skb_copy代替:将 sk_buff 和数据包复制到新的内存区域。skb_cloneskb_copy

编辑:编辑之前的回复并进行一些更正。