Linux kernel sendmsg导致内核死机

Linux kernel sendmsg导致内核死机,linux-kernel,netlink,Linux Kernel,Netlink,我使用Netlink套接字尝试了下面的程序,效果非常好 Src: 内核模块 #包括 #包括 #包括 #包括 #定义NETLINK_用户31 结构sock*nl_sk=NULL; 静态无效hello_nl_recv_msg(结构sk_buff*skb) { 结构nlmsghdr*nlh; int-pid; 结构sk_buff*skb_out; int msg_大小; char*msg=“Hello from kernel”; 国际关系; printk(内核信息“输入:%s\n”,函数); msg_

我使用Netlink套接字尝试了下面的程序,效果非常好

Src:

内核模块
#包括
#包括
#包括
#包括
#定义NETLINK_用户31
结构sock*nl_sk=NULL;
静态无效hello_nl_recv_msg(结构sk_buff*skb)
{
结构nlmsghdr*nlh;
int-pid;
结构sk_buff*skb_out;
int msg_大小;
char*msg=“Hello from kernel”;
国际关系;
printk(内核信息“输入:%s\n”,函数);
msg_size=strlen(msg);
nlh=(结构nlmsghdr*)skb->数据;
printk(KERN_INFO“Netlink接收到消息负载:%s\n”,(char*)nlmsg_数据(nlh));
pid=nlh->nlmsg_pid;/*发送进程的pid*/
skb_out=nlmsg_new(msg_大小,0);
如果(!skb_out)
{
printk(KERN_ERR“未能分配新skb\n”);
返回;
} 
nlh=nlmsg_输出(skb_输出,0,0,nlmsg_完成,msg_大小,0);
NETLINK_CB(skb_out)。dst_组=0;/*不在mcast组中*/
strncpy(nlmsg_数据(nlh)、msg、msg_大小);
res=nlmsg_单播(nl_sk、skb_out、pid);
如果(resnlmsg_len;
msg.msg_name=(void*)和dest_addr;
msg.msg_namelen=sizeof(dest_addr);
msg.msg_iov=&iov;
msg.msg_iovlen=1;
printf(“向内核发送消息”);
sendmsg(sock_fd和msg,0);
printf(“等待来自内核的消息”);
/*从内核读取消息*/
recvmsg(sock_fd和msg,0);
printf(“收到的消息负载:%s\n”,
NLMSG_数据(nlh));
关闭(sock_fd);
}

但是,当我在第一个
sendmsg
(主目录中)之后立即执行
sendmsg()
时,内核崩溃,系统重新启动


知道为什么会发生这种情况吗?

它就像一个符咒,或者它崩溃了…?你的问题解决了吗?我也遇到了同样的问题。