每当我尝试写入正在处理的 Linux 安全模块中的文件时,内核都会崩溃并显示以下错误消息。
我尝试使用vfs_write
而不是kernel_write
,尝试使用普通字符数组而不是我现在使用的缓冲区,但它总是崩溃并出现类似的错误消息。
错误消息的原因是什么,我该如何解决?
我知道在内核中写入文件是不好的,但我需要持久存储信息。
下面是我正在使用的代码的简化版本,它在 LSM_HOOK 中执行。
static int bnp_file_permission(struct file *file, int mask)
{
loff_t offset = 0;
struct file *filp = NULL;
char *buffer = NULL;
filp = filp_open("/var/bnp/access.log", O_WRONLY | O_APPEND, 0);
if (IS_ERR(filp)) {
printk(KERN_INFO "BNP: filp_open failed\n");
return 0;
}
buffer = kmalloc(20, GFP_KERNEL);
memset(buffer, 0x65, 20);
kernel_write(filp, buffer, sizeof(buffer), &offset); // <-- this lines causes the crash
filp_close(filp, NULL);
kfree(buffer);
}
详细的崩溃日志:
BUG: stack guard page was hit at 0000000011758623 (stack is 00000000132ba182..0000000012b2f5a4)
姓名:
Linux bnp 4.19.0-9-amd64 #12 SMP Debian 4.19.118-2 (2020-04-29) x86_64 GNU/Linux