从内核分配用户空间内存

问题描述 投票:0回答:2

我正在尝试打电话

sys_readlink(const char __user *path, char __user *buf, int bufsiz)

直接,但得到 EFAULT 错误代码。出现此错误是因为 buf 指向内核空间的内存。

那么,有没有可能从内核分配用户空间内存?

kmalloc(size, GFP_USER)
类似于
kmalloc(size, GFP_KERNEL)
并返回指向内核内存的指针。

c linux memory memory-management kernel
2个回答
9
投票

您可以使用

set_fs

暂时禁用内存地址有效性检查
mm_segment_t old_fs;

old_fs = get_fs();
set_fs(KERNEL_DS);
/* Your syscall here */
set_fs(old_fs);

0
投票

linux kernel 5.10没有set_fs功能。所以Hasturkun的方法失败了。

© www.soinside.com 2019 - 2024. All rights reserved.