【问题标题】:sk_buff struct functions and memory leaksk_buff 结构函数和内存泄漏
【发布时间】:2014-02-12 06:17:32
【问题描述】:

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

skb2 = skb_realloc_headroom(skb, size);

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

我的问题是 - 这些函数是否将 skb 复制为 skb2 并且我可以安全地释放 skb 吗?或者也许 skb2 只是扩展了 skb 而我无法释放它们?

【问题讨论】:

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


    【解决方案1】:

    第一个重新分配,释放原来的。第二个副本,让您释放两者。

    了解这一点的最简单方法是查看现有驱动程序如何调用这些函数。因此,请在 Linux 交叉参考中查找 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);
    

    【讨论】:

    • skb_realloc_headroom 不会释放原始 skb!大多数情况下,我可以在原版上找到调用 consume_skb。 consume_skb 调用 __kfree_skb。
    猜你喜欢
    • 2016-03-28
    • 2019-08-19
    • 2014-09-25
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2012-09-02
    • 2021-06-17
    • 2013-01-12
    相关资源
    最近更新 更多