我正在按照教程学习内核模块编程。之后,我编写了一些程序来在读取或写入/proc 文件时执行一些处理。我成功地编译了模块并且也执行了 insmod。但是每当我尝试读取像
这样的 proc 文件时cat/proc/procfile
它抛出权限被拒绝的错误。
我在我的代码中包含了模块权限函数,我发现每次权限检查失败时都会抛出错误。
struct cred *proc_current; //to get the EUID for current task
static struct proc_dir_entry *our_proc_file;
static int module_permission(struct inode *inode, int op)
{
printk(KERN_INFO "permission is %d \n",op);
if(op==4||(op==2 && (proc_current->euid == 0)))
return 0;
return -EACCES;
}
.....
//Init module
static int __init proc_init(void)
{
printk(KERN_INFO "Init module loaded \n");
our_proc_file=create_proc_entry(PROC_NAME, 0644, NULL);
if(our_proc_file == NULL)
{
remove_proc_entry(PROC_NAME,proc_root);
printk(KERN_INFO "Error in creating proc file \n");
return -ENOMEM;
}
our_proc_file->proc_fops=&fops;
our_proc_file->proc_iops=&iops;
our_proc_file->mode=S_IFREG | S_IRUGO | S_IWUSR;
our_proc_file->uid=0;
our_proc_file->gid=0;
our_proc_file->size=80;
printk(KERN_INFO "proc file created in '/proc' \n");
return 0;
}
我尝试在 init 模块中将文件权限更改为 777,但这对我没有帮助。 当我排除权限检查功能时,它会起作用。 另外看看权限函数,其中
printk(KERN_INFO "permission is %d \n",op);
总是打印 36。这是什么原因以及这里如何实际进行权限检查?
实际代码在这里 procfile.c
最佳答案
/proc 下的大部分文件仅供 root 使用,如果您尝试以普通用户身份阅读它们,您将得到您引用的结果。
关于c - 读取 proc 文件时权限被拒绝错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20977085/