Linux kernel 如何在内核模块中找到给定sock的task_struct?

Linux kernel 如何在内核模块中找到给定sock的task_struct?,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,有没有人知道我如何(高效地)在内核模块(即创建给定网络层套接字的进程)中为给定的结构套接字获取结构任务 如果我错过了显而易见的东西,我很抱歉,这可能是因为我对内核开发相当陌生。但我已经试着找到那个链接好几天了。我最大的希望是使用sk->sk_socket->file->f_owner.pid。然后,我可以使用f_getown()来获取pid,然后从那里开始。 但不知何故,这个想法并没有奏效,至少对于AF_INET类型的套接字来说是如此。通过查看_sock_socket()中的内核代码和调用的函数

有没有人知道我如何(高效地)在内核模块(即创建给定网络层套接字的进程)中为给定的结构套接字获取结构任务

如果我错过了显而易见的东西,我很抱歉,这可能是因为我对内核开发相当陌生。但我已经试着找到那个链接好几天了。我最大的希望是使用sk->sk_socket->file->f_owner.pid。然后,我可以使用f_getown()来获取pid,然后从那里开始。 但不知何故,这个想法并没有奏效,至少对于AF_INET类型的套接字来说是如此。通过查看_sock_socket()中的内核代码和调用的函数,可以看出f_所有者成员从未指向当前

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


从那以后,我只是走到了死胡同。任何正确方向的暗示都将不胜感激非常感谢。

Field
file->f_owner
属于
struct fown\u struct
类型,它是关于
f_SETOWN
fcntl代码的。它不是关于文件的创建者(开启者),而是关于SIGIO信号接收器。有关更多信息,请参阅。“如何(有效地)在内核模块中为给定的结构套接字(即创建给定网络层套接字的进程)获取结构任务结构”—您是指通过
socket
调用创建套接字的进程吗?我不认为内核存储了这些信息,因为该进程随时都可能死亡(但是套接字可能因为
fork
pthread\u create
而存在)。我的最终目标是进行一种查找,为您提供包含特定套接字的进程。