2009-11-28 56 views
0

我有一个设备驱动程序模块,它执行register_chardev()。在驱动程序的open()函数中,我希望能够确定尝试打开设备节点的进程的pid或pgid。这可能吗?有没有人有从哪里开始的任何想法?Linux设备节点只能访问某些进程组

我认为这应该有点安全,我的设备节点只允许我的应用程序使用它,因为除非它们在同一个会话中,否则无法将进程迁移到新进程组。

回答

3

内核不是做出这种策略决定的正确场所 - 设置谁可以打开设备节点的权限的正确位置是通过设置文件系统中设备节点文件的常规所有权和权限。

如果你真的有心设置它,current->pid是PID,current->tgid是线程组ID,current->group_leader->pid是PGID。

+0

谢谢,是否保证调度程序不会在驱动程序的open函数执行时将当前更新到进程队列中的新进程。我想一个root用户可以通过加载修改后的驱动模块来绕过这个问题。但是我将在设备节点文件上使用它以及权限和所有权。 – 2009-11-28 03:50:48

+0

open函数在进行系统调用的进程的上下文中执行 - 它可以被抢占,但是当open函数中的代码正在执行'current'时,它将指向相同的进程。 – caf 2009-11-28 05:01:14