从内核空间中的文件指针获取fd

时间:2013-02-16 19:02:54

标签: c linux-kernel file-permissions kernel

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

由于

1 个答案:

答案 0 :(得分: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"非常一致。