sk_buff结构函数和内存泄漏

时间:2014-02-12 06:17:33

标签: c linux memory-leaks linux-device-driver

我正在为linux内核开发一些网络驱动程序。它工作正常,但似乎有内存泄漏。我认为我怀疑使用的两个功能是:

skb2 = skb_realloc_headroom(skb, size);

skb2 = skb_copy_expand(skb, skb_headroom(skb), size, GFP_ATOMIC);

我的问题是 - 这些功能是否将skb的副本复制为skb2,我可以安全地免费获取skb?或者也许skb2只是扩展skb而我无法释放它们?

1 个答案:

答案 0 :(得分:0)

第一次重新分配,释放原件。第二份副本,让你自由。

最简单的方法是查看现有驱动程序如何调用这些函数。因此,请在Linux Cross Reference上查找skb_realloc_headroomskb_copy_expand,然后单击几个驱动程序的源代码。

skb_realloc_headroom通常被称为:

skb = skb_realloc_headroom(skb, size);
...
dev_kfree_skb(skb);

...而skb_copy_expand被称为这样:

new_skb = skb_copy_expand(skb, skb_headroom(skb) + more_headroom,
                          skb_tailroom(skb), GFP_ATOMIC);
...
dev_kfree_skb(skb);
dev_kfree_skb(new_skb);