c - 读取 proc 文件时权限被拒绝错误

标签 c linux module kernel permission-denied

我正在按照教程学习内核模块编程。之后,我编写了一些程序来在读取或写入/proc 文件时执行一些处理。我成功地编译了模块并且也执行了 insmod。但是每当我尝试读取像

这样的 proc 文件时

cat/proc/procfile

它抛出权限被拒绝的错误。

我在我的代码中包含了模块权限函数,我发现每次权限检查失败时都会抛出错误。

struct cred *proc_current; //to get the EUID for current task
static struct proc_dir_entry *our_proc_file;

static int module_permission(struct inode *inode, int op)
{
printk(KERN_INFO "permission is %d \n",op);
if(op==4||(op==2 && (proc_current->euid == 0)))
 return 0;
return -EACCES;
}

.....
//Init module
static int __init proc_init(void)
{
printk(KERN_INFO "Init module loaded \n");
our_proc_file=create_proc_entry(PROC_NAME, 0644, NULL);
if(our_proc_file == NULL)
{
remove_proc_entry(PROC_NAME,proc_root);
printk(KERN_INFO "Error in creating proc file \n");
return -ENOMEM;
}
our_proc_file->proc_fops=&fops;
our_proc_file->proc_iops=&iops;
our_proc_file->mode=S_IFREG | S_IRUGO | S_IWUSR;
our_proc_file->uid=0;
our_proc_file->gid=0;
our_proc_file->size=80;
printk(KERN_INFO "proc file created in '/proc' \n");
return 0;
}

我尝试在 init 模块中将文件权限更改为 777,但这对我没有帮助。 当我排除权限检查功能时,它会起作用。 另外看看权限函数,其中

printk(KERN_INFO "permission is %d \n",op);

总是打印 36。这是什么原因以及这里如何实际进行权限检查?

实际代码在这里 procfile.c

最佳答案

/proc 下的大部分文件仅供 root 使用,如果您尝试以普通用户身份阅读它们,您将得到您引用的结果。

关于c - 读取 proc 文件时权限被拒绝错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20977085/

相关文章:

linux - 在 Ubuntu 14.04.2 问题上安装 python-pip

c - 正在运行的可执行文件突然断电变成空文件

python - 如何在 Linux 上的 Python3.x 中检查窗口是否存在

python - Python 的 MySQL 模块

vb.net - VB 中的类与模块

Ruby module_function,调用模块的私有(private)方法,在模块的类方法样式中调用显示错误

c - C 代码中求和结果错误

c - 在C中插入到队列的末尾

c - 从类型 ‘int (*)[1000] 分配给类型 ‘int[100][1000]’ 时类型不兼容

c - 如何对 C 代码的托管包装器进行单元测试?