提交 976918db 创建 作者: Silas Boyd-Wickizer's avatar Silas Boyd-Wickizer

umemcpy: a kernel function that copies data from user to kernel

umemcpy is as safe as argptr.
上级 18399524
...@@ -273,6 +273,7 @@ int argptr(int, char**, int); ...@@ -273,6 +273,7 @@ int argptr(int, char**, int);
int argstr(int, char**); int argstr(int, char**);
int fetchint64(uptr, u64*); int fetchint64(uptr, u64*);
int fetchstr(uptr, char**); int fetchstr(uptr, char**);
int umemcpy(void *, const void *, u64);
void syscall(void); void syscall(void);
// string.c // string.c
......
...@@ -109,6 +109,18 @@ argstr(int n, char **pp) ...@@ -109,6 +109,18 @@ argstr(int n, char **pp)
return fetchstr(addr, pp); return fetchstr(addr, pp);
} }
int
umemcpy(void *dst, const void *umen, u64 size)
{
uptr src = (uptr)umen;
for(uptr va = PGROUNDDOWN(src); va < src+size; va = va+PGSIZE)
if(pagefault(myproc()->vmap, va, 0) < 0)
return -1;
memmove(dst, umen, size);
return 0;
}
extern long sys_chdir(void); extern long sys_chdir(void);
extern long sys_close(void); extern long sys_close(void);
extern long sys_dup(void); extern long sys_dup(void);
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论