【发布时间】:2013-02-01 13:33:49
【问题描述】:
给定一个结构文件,是否可以在 linux 内核空间中获取关联的文件描述符?我正在尝试使用 sys_chmod 或 sys_fchmod 更改权限。一个接受文件描述符,另一个需要来自用户空间的文件名。我可以弄清楚如何获取文件名,但如何将其转换为用户空间指针?
谢谢
【问题讨论】:
标签: c linux-kernel file-permissions kernel
给定一个结构文件,是否可以在 linux 内核空间中获取关联的文件描述符?我正在尝试使用 sys_chmod 或 sys_fchmod 更改权限。一个接受文件描述符,另一个需要来自用户空间的文件名。我可以弄清楚如何获取文件名,但如何将其转换为用户空间指针?
谢谢
【问题讨论】:
标签: c linux-kernel file-permissions kernel
你要的函数是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);
【讨论】: