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