2012-02-02 3 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 это с помощью #define в get_current(). Почему это происходит? Есть ли список членов структуры, возвращаемых с get_current()?

ответ

6

struct task_struct определен в include/linux/sched.h в дереве исходных текстов ядра, вы можете просматривать его там. Текущие полномочия будут в get_current()->cred и эффективный идентификатор пользователя get_current()->cred->euid

Это не безопасно для доступа к этим членам напрямую, вы должны достаточно позвонить current_euid() из include/linux/cred.h

http://www.kernel.org/doc/Documentation/security/credentials.txt может представлять интерес для вас, а