从内核分配用户空间内存

时间:2011-10-02 20:51:34

标签: c linux memory memory-management kernel

我正打算打电话

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

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

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

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

1 个答案:

答案 0 :(得分:7)

您可以使用set_fs

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

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