提交 da29ebfc 创建 作者: Nickolai Zeldovich's avatar Nickolai Zeldovich

unmap rounding bug

上级 8f783790
...@@ -126,18 +126,20 @@ long ...@@ -126,18 +126,20 @@ long
sys_unmap(void) sys_unmap(void)
{ {
uptr addr; uptr addr;
u64 len; uptr len;
if (argint64(0, &addr) < 0) if (argint64(0, &addr) < 0)
return -1; return -1;
if (argint64(1, &len) < 0) if (argint64(1, &len) < 0)
return -1; return -1;
if (myproc()->vmap->remove(PGROUNDDOWN(addr), PGROUNDUP(len)) < 0)
uptr align_addr = PGROUNDDOWN(addr);
uptr align_len = PGROUNDUP(addr + len) - align_addr;
if (myproc()->vmap->remove(align_addr, align_len) < 0)
return -1; return -1;
updatepages(myproc()->vmap->pml4, updatepages(myproc()->vmap->pml4,
(void*) (PGROUNDDOWN(addr)), (void*) align_addr, (void*) (align_addr+align_len-1), 0);
(void*) (PGROUNDDOWN(addr)+PGROUNDUP(len)), 0);
cli(); cli();
lcr3(v2p(myproc()->vmap->pml4)); lcr3(v2p(myproc()->vmap->pml4));
for (int i = 0; i < ncpu; i++) for (int i = 0; i < ncpu; i++)
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论