2012-02-02 64 views
3

我寫了一個內核模塊,它讀取和寫入/proc文件,它工作正常。現在我想使用它的權限,但是當我爲下面顯示的權限編寫函數時,它給我一個錯誤。目標是讓每個人都能夠讀取文件,但只有root可以寫入。get_current()在這個內核模塊中返回什麼?

int my_permission(struct inode *inode, int op) 
{ 
    if(op == 4||(op == 2 && current->euid = 0)) //euid is not a member of  task_struct 
     return 0; 
    return -EACCES; 
} 

const struct inode_operations my_iops = { 
    .permission = my_permission, 
}; 

我得到的錯誤是:

/home/karan/practice/procf/testproc1.c: In function ‘my_permission’: 
/home/karan/practice/procf/testproc1.c:50:32: error: ‘struct task_struct’ has no member named ‘euid' 

我知道current已經#defined到get_current()。這是爲什麼發生?是否有從get_current()返回的結構成員列表?

回答

6

struct task_struct在內核源代碼樹中的include/linux/sched.h中定義,您可以查看其中的成員。當前憑據將是get_current()->cred,有效用戶ID是get_current()->cred->euid

這不是安全的直接訪問這些成員,必須而調用current_euid()include/linux/cred.h

http://www.kernel.org/doc/Documentation/security/credentials.txt可能是你的興趣以及