【发布时间】:2020-04-15 22:10:16
【问题描述】:
Linux Kernel 5.0.0-37
我正在编写一个函数来管理要作为指向struct inode_operations 的函数指针提供的权限。这是一个简化的存根实现:
#include <linux/cred.h>
int pfsw_permission(struct inode *ino, int op){
if(uid_eq(INIT_USER->uid, get_current_user()->uid)){
printk(KERN_INFO "Current user is root\n");
} else {
printk(KERN_INFO "Current user is not root\n");
}
if(op & (MAY_READ | MAY_WRITE)){
return 0;
}
return -EACCES;
}
编译包含此函数的内核模块并尝试加载它时dmesg 显示以下错误:
Unknown symbol root_user (err -2)
我认为这是由于来自include/linux/sched/user.h 的INIT_USER 宏定义为
extern struct user_struct root_user;
#define INIT_USER (&root_user)
问题:为什么符号root_user 被声明但没有被定义?如何正确使用INIT_USER?
【问题讨论】:
-
这当然不是实现您的目标的正确方法。想一想现有的哪些标准功能会有类似的需求,然后看看它是如何实现的。
标签: c linux permissions linux-kernel linux-device-driver