Linux kernel 释放斯库·布夫是谁的责任

Linux kernel 释放斯库·布夫是谁的责任,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,使用netlink\u kernel\u create()创建netlink套接字时,函数指针作为参数传递给该函数,当在该套接字上接收到消息时调用该函数。此回调函数接收一个sk_buff参数,该参数包含收到的消息 我的问题是,谁有责任释放这个sk_buff 示例代码 #包括 #包括 #包括 #包括 #定义NETLINK_用户31 结构sock*nl_sk=NULL 静态无效my_nl_recv_msg(结构sk_buff*skb){ } 静态int\uu init hello\u init(vo

使用
netlink\u kernel\u create()
创建netlink套接字时,函数指针作为参数传递给该函数,当在该套接字上接收到消息时调用该函数。此回调函数接收一个
sk_buff
参数,该参数包含收到的消息

我的问题是,谁有责任释放这个
sk_buff

示例代码 #包括
#包括
#包括
#包括

#定义NETLINK_用户31

结构sock*nl_sk=NULL

静态无效my_nl_recv_msg(结构sk_buff*skb){

}

静态int\uu init hello\u init(void){

}


net/netlink/af\u netlink.c
netlink\u unicast\u内核
,您的
my\u nl\u recv\u msg
函数的调用者将负责释放它

struct nlmsghdr *nlh;  
int pid;  

printk(KERN_INFO "Entering: %s\n", __FUNCTION__);  

nlh=(struct nlmsghdr*)skb->data;  
printk(KERN_INFO "Netlink received msg payload: %s\n",  
    (char*)NLMSG_DATA(nlh));  
pid = nlh->nlmsg_pid; /*pid of sending process */  
NETLINK_CB(skb).dst_group = 0; /* not in mcast group */  
NETLINK_CB(skb).pid = 0;      /* from kernel */  
//printk("About to send msg bak:\n");  
//netlink_unicast(nl_sk,skb,pid,MSG_DONTWAIT);
printk("Entering: %s\n",__FUNCTION__);  
nl_sk=netlink_kernel_create(&init_net, NETLINK_USER, 0,  
        my_nl_recv_msg, NULL, THIS_MODULE);  
if(!nl_sk)  
{  
    printk(KERN_ALERT "Error creating socket.\n");  
    return -10;  
}  
return 0;