don't force vm to print to serial; don't kill processes when they
have 'bad' memory ranges (as it's the requestor's fault)
This commit is contained in:
parent
ef812af5a6
commit
e4e3995fb0
@ -340,9 +340,11 @@ PRIVATE void vm_init(void)
|
|||||||
CALLMAP(VM_VFS_REPLY_CLOSE, do_vfs_reply, VFS_PROC_NR);
|
CALLMAP(VM_VFS_REPLY_CLOSE, do_vfs_reply, VFS_PROC_NR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
void kputc(int c)
|
void kputc(int c)
|
||||||
{
|
{
|
||||||
if(c == '\n')
|
if(c == '\n')
|
||||||
ser_putc('\r');
|
ser_putc('\r');
|
||||||
ser_putc(c);
|
ser_putc(c);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -94,6 +94,7 @@ PUBLIC int do_map_phys(message *m)
|
|||||||
struct vmproc *vmp;
|
struct vmproc *vmp;
|
||||||
endpoint_t target;
|
endpoint_t target;
|
||||||
struct vir_region *vr;
|
struct vir_region *vr;
|
||||||
|
vir_bytes len;
|
||||||
|
|
||||||
target = m->VMMP_EP;
|
target = m->VMMP_EP;
|
||||||
if(target == SELF)
|
if(target == SELF)
|
||||||
@ -107,8 +108,12 @@ PUBLIC int do_map_phys(message *m)
|
|||||||
if(!(vmp->vm_flags & VMF_HASPT))
|
if(!(vmp->vm_flags & VMF_HASPT))
|
||||||
return ENXIO;
|
return ENXIO;
|
||||||
|
|
||||||
|
len = m->VMMP_LEN;
|
||||||
|
if(len % VM_PAGE_SIZE)
|
||||||
|
len += VM_PAGE_SIZE - (len % VM_PAGE_SIZE);
|
||||||
|
|
||||||
if(!(vr = map_page_region(vmp, arch_vir2map(vmp, vmp->vm_stacktop),
|
if(!(vr = map_page_region(vmp, arch_vir2map(vmp, vmp->vm_stacktop),
|
||||||
VM_DATATOP, (vir_bytes) m->VMMP_LEN, (vir_bytes)m->VMMP_PHADDR,
|
VM_DATATOP, len, (vir_bytes)m->VMMP_PHADDR,
|
||||||
VR_DIRECT | VR_NOPF | VR_WRITABLE, 0))) {
|
VR_DIRECT | VR_NOPF | VR_WRITABLE, 0))) {
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
|
@ -159,20 +159,13 @@ PUBLIC void handle_memory(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(r != OK) {
|
if(r != OK) {
|
||||||
printf("VM: SIGSEGV %d, memory range not available\n",
|
printf("VM: memory range 0x%lx-0x%lx not available in %d\n",
|
||||||
|
arch_map2vir(vmp, mem), arch_map2vir(vmp, mem+len),
|
||||||
vmp->vm_endpoint);
|
vmp->vm_endpoint);
|
||||||
if((s=sys_kill(vmp->vm_endpoint, SIGSEGV)) != OK)
|
|
||||||
vm_panic("sys_kill failed", s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(sys_vmctl(who, VMCTL_MEMREQ_REPLY, r) != OK)
|
if(sys_vmctl(who, VMCTL_MEMREQ_REPLY, r) != OK)
|
||||||
vm_panic("handle_memory: sys_vmctl failed", r);
|
vm_panic("handle_memory: sys_vmctl failed", r);
|
||||||
|
|
||||||
if(r != OK) {
|
|
||||||
printf("VM: killing %d\n", vmp->vm_endpoint);
|
|
||||||
if((s=sys_kill(vmp->vm_endpoint, SIGSEGV)) != OK)
|
|
||||||
vm_panic("sys_kill failed", s);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user