X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_module%2Fmain.c;h=17229c5e39059ec873a3ba04973cfb011f1e5436;hb=13843de52d67d647f8ef05f736dc8f7d8be6adb3;hp=74301e93e4576ad68093f7bda1acbaca541e3742;hpb=8a2c4643a2144ef123cabfeb94c95e835a1c3600;p=palacios.git diff --git a/linux_module/main.c b/linux_module/main.c index 74301e9..17229c5 100644 --- a/linux_module/main.c +++ b/linux_module/main.c @@ -141,7 +141,14 @@ out_err: } case V3_FREE_GUEST: { unsigned long vm_idx = arg; - struct v3_guest * guest = guest_map[vm_idx]; + struct v3_guest * guest; + + if (vm_idx > MAX_VMS) { + ERROR("Invalid VM index: %ld\n", vm_idx); + return -1; + } + + guest = guest_map[vm_idx]; if (!guest) { ERROR("No VM at index %ld\n",vm_idx); @@ -150,7 +157,11 @@ out_err: INFO("Freeing VM (%s) (%p)\n", guest->name, guest); - free_palacios_vm(guest); + if (free_palacios_vm(guest)<0) { + ERROR("Cannot free guest at index %ld\n",vm_idx); + return -1; + } + guest_map[vm_idx] = NULL; break; } @@ -174,9 +185,25 @@ out_err: break; } - default: - ERROR("\tUnhandled\n"); + case V3_RESET_MEMORY: { + if (palacios_init_mm() == -1) { + ERROR("Error resetting Palacios memory\n"); + return -EFAULT; + } + break; + } + + default: { + struct global_ctrl * ctrl = get_global_ctrl(ioctl); + + if (ctrl) { + return ctrl->handler(ioctl, arg); + } + + WARNING("\tUnhandled global ctrl cmd: %d\n", ioctl); + return -EINVAL; + } } return 0;