我在學習內核模塊編程的教程。之後,我編寫了一些編程來在/ 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