我在学习内核模块编程的教程。之后,我编写了一些编程来在/ proc文件读取或写入时执行一些过程。我成功编译了模块并进行了insmod。但是,当过我尝试念想权限在读取proc文件时被拒绝错误
执行cat/proc/procfile
一个proc文件,则抛出权限被拒绝的错误。
我在我的代码中包含了模块权限函数,每当权限检查失败时我都会发现它实际上会引发错误。
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
请修复缩进。内核版本为? – alk
? – ldx
教程是基于2.6版本,我根据最近的版本更正了所有的语法 – Chandu