从内核空间中的文件指针获取fd
给定一个struct文件,是否可以在linux内核空间中获取相关的文件描述符? 我正在尝试使用sys_chmod或sys_fchmod更改权限。 一个接受文件描述符,另一个需要来自用户空间的文件名。 我可以弄清楚如何获取文件名但是如何将其转换为用户空间指针?
谢谢
你所追求的function是chmod_common
:
static int chmod_common(struct path *path, umode_t mode)
这需要一个path
和您想要设置的模式。 不幸的是,正如您所注意到的那样, 它是静态的 ,显然不会导出。 所以你可以采取多种方式:
- 复制它在你自己的function中做的任何事情
- 从
struct file
获取“文件描述符”(丑陋) - 找到一种方法来调用
sys_chmod
现在sys_chmod
需要一个用户指针但你在内核中。 以下是您可以采取的措施:
mm_segment_t oldfs = get_fs(); char __user *userptr; userptr = (char __user __force *) kernptr; set_fs(KERNEL_DS); /* call sys_chmod */ set_fs(oldfs);
所有这些都非常符合“你永远不应该在内核中做的事情” 。