Что get_current () возвращает в этом модуле ядра? - PullRequest
3 голосов
/ 02 февраля 2012

Я написал модуль ядра, который читает и записывает /proc файлы, и он работает нормально. Теперь я хочу использовать разрешения с ним, но когда я пишу функцию для разрешений, показанных ниже, это дает мне ошибку. Цель состоит в том, чтобы каждый мог прочитать файл, но только root может писать в него.

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

1 Ответ

6 голосов
/ 03 февраля 2012

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 может быть также интересен для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...