diff options
| -rw-r--r-- | usr/src/uts/i86pc/io/vmm/vmm_sol_dev.c | 12 |
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); |
