我正在编写一个内核模块,它使用jprobes挂钩一些系统调用(例如tcp_send()
),并使用netlink套接字向用户空间发送一些信息。
netlink_unicast(nlsk, skb, pid, MSG_DONTWAIT);
我的回叫电话是:
void nl_recv(struct sk_buff *skb) {
struct nlmsghdr *nlh;
if (skb == NULL) {
return;
}
nlh = (struct nlmsghdr *) skb->data;
pid = nlh->nlmsg_pid;
debug(KERN_NOTICE "Kernel Module: Received pid from %u\n", pid);
}
我想在每次发送后暂停执行我的内核模块。重新启动接收。 我尝试过使用完成和等待队列,但似乎他们将会话推送到GPF。