我正在尝试打电话
sys_readlink(const char __user *path, char __user *buf, int bufsiz)
直接,但得到 EFAULT 错误代码。出现此错误是因为 buf 指向内核空间的内存。
那么,有没有可能从内核分配用户空间内存?
kmalloc(size, GFP_USER)
类似于 kmalloc(size, GFP_KERNEL)
并返回指向内核内存的指针。
您可以使用
set_fs
暂时禁用内存地址有效性检查
mm_segment_t old_fs;
old_fs = get_fs();
set_fs(KERNEL_DS);
/* Your syscall here */
set_fs(old_fs);
linux kernel 5.10没有set_fs功能。所以Hasturkun的方法失败了。