ネットリンクを介してユーザースペースにメッセージを送信するカーネルモジュールを開発しています。
メッセージ(送信するメッセージ)を作成するには:skb_out = nlmsg_new(msg_size,0);
。
最初のメッセージを送信した後、2番目のメッセージを送信する前に、でskb_outを解放しようとしましたnlmsg_free(skb_out)
が、この関数によってカーネルがクラッシュします。
- このクラッシュを修正する方法は?
また
- メッセージの送信後にskb_outを実行する他の方法はありますか?
ここでソースコードの後に:
skb_out = nlmsg_new(msg_size,0);
if(!skb_out)
{
printk(KERN_ERR "Failed to allocate new skb\n");
return;
}
nlh=nlmsg_put(skb_out,0,0,NLMSG_DONE,msg_size,0);
NETLINK_CB(skb_out).dst_group = 0; /* not in mcast group */
strncpy(nlmsg_data(nlh),msg,msg_size);
res=nlmsg_unicast(nl_sk,skb_out,pid);
if(res<0)
{
printk(KERN_INFO "Error while sending bak to user\n");
}
nlmsg_free(skb_out);