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
?