}
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);
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;
}
break;
}
+ 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);