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

C 从内核空间中的文件指针获取fd,c,linux-kernel,file-permissions,kernel,C,Linux Kernel,File Permissions,Kernel,给定一个结构文件,是否可以在linux内核空间中获取关联的文件描述符?我正在尝试使用sys\u chmod或sys\u fchmod更改权限。一个接受文件描述符,另一个需要来自用户空间的文件名。我可以知道如何获取文件名,但如何将其转换为用户空间指针 谢谢您想要的功能是chmod\u common: static int chmod_common(struct path *path, umode_t mode) 它采用路径和要设置的模式。不幸的是,正如您所注意到的,它是静态的,显然没有导出。所以

给定一个结构文件,是否可以在linux内核空间中获取关联的文件描述符?我正在尝试使用sys\u chmod或sys\u fchmod更改权限。一个接受文件描述符,另一个需要来自用户空间的文件名。我可以知道如何获取文件名,但如何将其转换为用户空间指针


谢谢

您想要的功能是
chmod\u common

static int chmod_common(struct path *path, umode_t mode)
它采用
路径
和要设置的模式。不幸的是,正如您所注意到的,它是静态的,显然没有导出。所以你可以选择多种方式:

  • 在您自己的函数中复制它所做的任何事情
  • 从结构文件中获取“文件描述符”(丑陋)
  • 找到调用sys\u chmod的方法
现在,
sys\u 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);

所有这些都非常符合。

谢谢!我知道另一种选择是丑陋地遍历任务的fdtable,但我从来不知道_____)force。