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