在测试创建文件时,测试发现需要提升内存访问权限到 KERNEL_DS。内核使用系统调用参数肯定是内核空间,为了不让这些系统调用检查参数所以必须设置set_fs(KERNEL_DS)才能使用该系统调用。记录一下
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
static mm_segment_t old_fs;
int test(void)
{
int ret;
struct file *filp;
mm_segment_t old_fs;
loff_t pos;
const char *filename = "/path/to/file.txt";
const char *content = "Hello, world!\n";
/* 保存当前的内存访问权限级别 */
old_fs = get_fs();
/* 提升内存访问权限到 KERNEL_DS */
set_fs(KERNEL_DS);
/* 使用 filp_open() 创建文件 */
filp = filp_open(filename, O_CREAT | O_RDWR, 0644);
if (IS_ERR(filp)) {
ret = PTR_ERR(filp);
pr_err("Failed to create file '%s': %d\n", filename, ret);
goto restore_fs;
}
/* 写入文件内容 */
ret = kernel_write(filp, content, strlen(content), &pos);
if (ret < 0) {
pr_err(&#