summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr/src/uts/i86pc/io/vmm/vmm_sol_dev.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/usr/src/uts/i86pc/io/vmm/vmm_sol_dev.c b/usr/src/uts/i86pc/io/vmm/vmm_sol_dev.c
index 977987589f..602889b779 100644
--- a/usr/src/uts/i86pc/io/vmm/vmm_sol_dev.c
+++ b/usr/src/uts/i86pc/io/vmm/vmm_sol_dev.c
@@ -1611,6 +1611,9 @@ vmmdev_do_vm_destroy(const char *name, cred_t *cr)
vmm_softc_t *sc;
int err;
+ if (crgetuid(cr) != 0)
+ return (EPERM);
+
mutex_enter(&vmmdev_mtx);
mutex_enter(&vmm_mtx);
@@ -1619,6 +1622,15 @@ vmmdev_do_vm_destroy(const char *name, cred_t *cr)
mutex_exit(&vmmdev_mtx);
return (ENOENT);
}
+ /*
+ * We don't check this in vmm_lookup() since that function is also used
+ * for validation during create and currently vmm names must be unique.
+ */
+ if (!INGLOBALZONE(curproc) && sc->vmm_zone != curzone) {
+ mutex_exit(&vmm_mtx);
+ mutex_exit(&vmmdev_mtx);
+ return (EPERM);
+ }
err = vmm_do_vm_destroy_locked(sc, B_TRUE);
mutex_exit(&vmm_mtx);