当前位置: 技术问答>linux和unix
(请来拿分)关于netlink 中的 kfree_skb的问题!
来源: 互联网 发布时间:2016-05-08
本文导语: 以下是我在驱动里的一段程序 skb = alloc_skb(size, GFP_ATOMIC); skb->data[0]=0x55; skb->data[1]=0x55; skb->len=10; ret = netlink_unicast(nlfd, skb, user_pid, MSG_DONTWAIT); kfree_skb(skb); //记号1 我的目标进程能接收到这段数...
以下是我在驱动里的一段程序
skb = alloc_skb(size, GFP_ATOMIC);
skb->data[0]=0x55;
skb->data[1]=0x55;
skb->len=10;
ret = netlink_unicast(nlfd, skb, user_pid, MSG_DONTWAIT);
kfree_skb(skb); //记号1
我的目标进程能接收到这段数据,但是却会在“记号1”那条语句出现这个错误
kfree_skb passed an skb still on a list
把kfree_skb(skb)注释掉就完全没问题了,我的问题是为什么会出现这个错误? kfree_skb 和什么有关? 为什么这里不能释放? 是不是和netlink_unicast有关系? (我在其他驱动里用kfree_skb都没出现过这个问题)
skb = alloc_skb(size, GFP_ATOMIC);
skb->data[0]=0x55;
skb->data[1]=0x55;
skb->len=10;
ret = netlink_unicast(nlfd, skb, user_pid, MSG_DONTWAIT);
kfree_skb(skb); //记号1
我的目标进程能接收到这段数据,但是却会在“记号1”那条语句出现这个错误
kfree_skb passed an skb still on a list
把kfree_skb(skb)注释掉就完全没问题了,我的问题是为什么会出现这个错误? kfree_skb 和什么有关? 为什么这里不能释放? 是不是和netlink_unicast有关系? (我在其他驱动里用kfree_skb都没出现过这个问题)
|
netlink_unicast接管了你的skb,你不能释放它
你可以看看netlink_unicast/netlink_broadcast的代码
在Linux中的sk_buff是最后使用的人来处理回收内存
你可以看看netlink_unicast/netlink_broadcast的代码
在Linux中的sk_buff是最后使用的人来处理回收内存
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。