如何在内核模块中找到给定袜子的 task_struct?

问题描述

有没有人知道我如何(有效地)为内核模块(即创建给定网络层套接字的进程)中的给定 struct sock 获取 struct task_struct ?

如果我遗漏了明显的内容,我深表歉意,这可能是因为我对内核开发还很陌生。但我一直试图找到那个链接好几天了。我最大的希望是使用 sk->sk_socket->file->f_owner.pid。然后我可以使用 f_getown() 来获取 pid 并从那里获取。 但不知何故,这个想法没有奏效,至少对于 AF_INET 类型的套接字。从 __sock_socket() 中的内核代码调用函数来看,似乎 f_owner 成员从未指向 current。

所以我认为 file->f_owner 可能不应该再使用了,但我没有找到任何此类信息。实际上,在我的搜索过程中,我发现 sock_ioctl() 正在使用 f_setown() 和 f_getown()。所以 file->f_owner 似乎并没有过时。这就引出了我的第二个问题:如果 file->f_owner 没有过时,为什么不在套接字创建期间设置它?

从那时起,我就一直陷入死胡同。任何正确方向的提示将不胜感激。 - 非常感谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)