1
给定一个结构文件,是否可以在Linux内核空间中获取关联的文件描述符?我正尝试使用sys_chmod或sys_fchmod来更改权限。一个需要文件描述符,另一个需要用户空间的文件名。我可以弄清楚如何获取文件名,但是如何将其转换为用户空间指针?从内核空间中的文件指针获取fd
感谢
给定一个结构文件,是否可以在Linux内核空间中获取关联的文件描述符?我正尝试使用sys_chmod或sys_fchmod来更改权限。一个需要文件描述符,另一个需要用户空间的文件名。我可以弄清楚如何获取文件名,但是如何将其转换为用户空间指针?从内核空间中的文件指针获取fd
感谢
你是chmod_common
后是功能:
static int chmod_common(struct path *path, umode_t mode)
这需要一个path
,你要设置的模式。不幸的是,正如你注意到的那样,它是静态的,显然不会被导出。所以,你可以去多种方式:
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);
这一切都是在非常符合"things you never should do in the Kernel"。
谢谢!我知道一个替代方案是丑陋地遍历任务的fdtable,但我从来不知道__force。 – user2034614 2013-02-16 20:38:32