2014-01-07 81 views
2

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

+0

請修復縮進。內核版本爲? – alk

+0

? – ldx

+0

教程是基於2.6版本,我根據最近的版本更正了所有的語法 – Chandu

回答

0

大多數/ proc下的文件是根只,如果您嘗試閱讀它們,你會得到你舉結果的普通用戶。

+0

我嘗試用root ly ...仍面臨相同的錯誤.. – Chandu

0

更換
our_proc_file->mode=S_IFREG | S_IRUGO | S_IWUSR;

隨着
our_proc_file->mode = S_IRUGO | S_IWUGO | S_IXUGO;

參考:stat.h