提交 3cf099da 创建 作者: Silas Boyd-Wickizer's avatar Silas Boyd-Wickizer

kmemcpy: copy from kernel to user

上级 4a2116c4
...@@ -274,6 +274,7 @@ int argstr(int, char**); ...@@ -274,6 +274,7 @@ 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); int umemcpy(void *, const void *, u64);
int kmemcpy(void *, const void *, u64);
void syscall(void); void syscall(void);
// string.c // string.c
......
...@@ -121,6 +121,18 @@ umemcpy(void *dst, const void *umen, u64 size) ...@@ -121,6 +121,18 @@ umemcpy(void *dst, const void *umen, u64 size)
return 0; return 0;
} }
int
kmemcpy(void *umen, const void *src, u64 size)
{
uptr dst = (uptr)umen;
for(uptr va = PGROUNDDOWN(dst); va < dst+size; va = va+PGSIZE)
if(pagefault(myproc()->vmap, va, 0) < 0)
return -1;
memmove(umen, src, 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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论