2013-02-16 223 views
1

给定一个结构文件,是否可以在Linux内核空间中获取关联的文件描述符?我正尝试使用sys_chmod或sys_fchmod来更改权限。一个需要文件描述符,另一个需要用户空间的文件名。我可以弄清楚如何获取文件名,但是如何将其转换为用户空间指针?从内核空间中的文件指针获取fd

感谢

回答

1

你是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"

+0

谢谢!我知道一个替代方案是丑陋地遍历任务的fdtable,但我从来不知道__force。 – user2034614 2013-02-16 20:38:32

相关问题