выделить память пользовательского пространства из ядра - PullRequest
3 голосов
/ 03 октября 2011

Я пытаюсь позвонить

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

напрямую, но получить код ошибки EFAULT.Эта ошибка возникает из-за того, что buf указывает на память из пространства ядра.

Итак, есть ли способ выделить память пространства пользователя из ядра?

kmalloc(size, GFP_USER)аналогично kmalloc(size, GFP_KERNEL) и возвращает указатель на память ядра.

1 Ответ

7 голосов
/ 03 октября 2011

Вы можете временно отключить проверку правильности адреса памяти, используя set_fs

mm_segment_t old_fs;

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