Как я могу однозначно идентифицировать пользователей, пытающихся открыть () модуль ядра? - PullRequest
2 голосов
/ 24 мая 2010

Я работаю над модулем ядра и пытаюсь однозначно идентифицировать каждого из пользователей, пытающихся открыть () модуль (может быть как процессом, так и потоком).

Как лучше всего их идентифицировать? Есть ли идентификатор, который я могу получить из системного вызова?

Я хочу получить список всех пользователей, в котором указано, пытаются ли они открыть модуль для чтения / записи, и мне нужно знать, кто из них пытался действовать.

Ответы [ 3 ]

3 голосов
/ 02 августа 2010

Я предполагаю, что вы создаете простое Linux символьное устройство , которое будет создано в таком месте, как / dev / mydev . Если это так, то следующее должно дать вам хороший пример того, как это сделать. Однако, если у вас есть другое значение для открыть устройство , то это не будет применимо.

Операции с файлами вашего устройства char

struct file_operations mydev_fops = {
    .open = mydev_open,
};

Ваш mydev_open ()

static int mydev_open(struct inode *inode, struct file *filp)
{
    pid_t pid;
    int user_id;

    /* This is the thread-ID, traditional PID is found in current->pgid */
    pid = current->pid;

    /* The current user-id (as of 2.6.29) */
    user_id = current_uid();
}

Для получения дополнительной информации о том, что вы можете узнать о текущем процессе, посмотрите файл заголовка include / linux / cred.h .

0 голосов
/ 22 ноября 2010

Вы сами решаете, какие уникальные средства, в зависимости от ваших требований: уникальный кортеж может состоять из (pid) Или это может быть (tid, uid), или (filp), или (inode).

0 голосов
/ 25 мая 2010

Когда вызывается ваш метод open, current будет указывать на task_struct задачи (~ = thread), которая его вызывает.

Однако это редко правильный подход.

...