【发布时间】:2021-07-11 21:37:54
【问题描述】:
我正在创建一个 proc 文件 (/proc/key),用户可以将其 decryption_key 写入该文件,然后该密钥将用于解密存储在内核模块中的缓冲区的内容。此外,我还有另一个 proc 条目(/proc/decrypted),用于读取存储解密文本的缓冲区的内容。
问题是我不希望用户能够向 (/proc/decrypted) 文件写入任何内容,也不希望他从 (/proc/key) 读取任何内容。如何实现?
我已经将file_operations结构中的相应函数指向NULL,但是很明显,一旦用户尝试它们,这将导致分段错误。
如何防止从 procfs 读取或写入?我应该只创建没有主体的函数并在需要时将 file_operations 结构指向它们吗?
static ssize_t key_proc_write(struct file *filp, const char __user *buf, size_t count, loff_t *ppos)
{
char temp[128];
memset(temp, 0, 128);
int c;
c = copy_from_user(temp, buf, count);
return count;
}
static const struct file_operations Proc_key_fops = {
.owner = THIS_MODULE,
.open = hello_proc_open,
.read = NULL,
.write = key_proc_write,
.llseek = seq_lseek,
.release = single_release,
};
【问题讨论】:
-
将它们指向一个返回错误代码的函数,例如
EPERM -
同样
open()函数可以检查他们是否指定O_RDONLY、O_WRONLY或O_RDWR,并返回无效方向的错误。 -
@Barmar 如何将它们指向这些功能?能给我举个例子吗?另外,如何按照您的建议将权限设置为只读?这将完全按照我的意愿进行
-
什么意思?只需编写一个返回错误的函数
key_proc_read,然后使用.read = key_proc_read -
写一个函数
key_proc_open检查打开模式。
标签: c module linux-kernel proc procfs