Как читать права доступа к файлу Linux в ядре Linux - PullRequest
0 голосов
/ 08 марта 2019

если я объявляю разрешения для режима переменной типа umode_t в ядре Linux, как проверить, есть ли у него разрешения на чтение или запись

Например - я сохраняю разрешения в umode_t file_mode, теперь как проверить, есть ли у него разрешения на чтение и запись программно в Linux

Я пытался использовать filp-> f_op-> read, но всегда выдает ошибку, даже когда файл имеет доступ для чтения

umode_t input_file_mode;
filp = filp_open( args->inputfile,O_RDONLY,0 );
input_file_mode = filp->f_inode->i_mode;
if (!filp->f_op->read)
{
     error = -EACCES;
     printk("reading input file failed\n");
}

1 Ответ

1 голос
/ 08 марта 2019

Чтобы проверить, есть ли у пользователя определенные разрешения для данного inode, используйте функцию inode_permissions.Он объявлен в linux/fs.h и имеет следующее определение (в fs / namei.c ):

/**
 * inode_permission - Check for access rights to a given inode
 * @inode: Inode to check permission on
 * @mask: Right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC)
 *
 * Check for read/write/execute permissions on an inode.  We use fs[ug]id for
 * this, letting us set arbitrary permissions for filesystem access without
 * changing the "normal" UIDs which are used for other things.
 *
 * When checking for MAY_APPEND, MAY_WRITE must also be set in @mask.
 */
int inode_permission(struct inode *inode, int mask)

Пример использования:

if(inode_permission(inode, MAY_WRITE | MAY_READ) == 0) {
    // Current user has permissions to read and write the file.
}
...