When vmd/vmctl switched to handling memory in bytes, seems a few places for user VMs were missed. Additionally the first hunk removes the quota hit if the VM will not be created.
diff --git config.c config.c index 374d7de6629..425c901f36a 100644 --- config.c +++ config.c @@ -241,8 +241,10 @@ config_setvm(struct privsep *ps, struct vmd_vm *vm, uint32_t peerid, uid_t uid) /* increase the user reference counter and check user limits */ if (vm->vm_user != NULL && user_get(vm->vm_user->usr_id.uid) != NULL) { user_inc(vcp, vm->vm_user, 1); - if (user_checklimit(vm->vm_user, vcp) == -1) + if (user_checklimit(vm->vm_user, vcp) == -1) { + user_inc(vcp, vm->vm_user, 0); return (EPERM); + } } /* diff --git vmd.c vmd.c index 2f3ac1a76f2..a7687d6ce93 100644 --- vmd.c +++ vmd.c @@ -1966,7 +1966,7 @@ user_inc(struct vm_create_params *vcp, struct vmd_user *usr, int inc) usr->usr_maxifs += vcp->vcp_nnics * inc; if (log_getverbose() > 1) { - (void)fmt_scaled(usr->usr_maxmem * 1024 * 1024, mem); + (void)fmt_scaled(usr->usr_maxmem, mem); log_debug("%s: %c uid %d ref %d cpu %llu mem %s ifs %llu", __func__, inc == 1 ? '+' : '-', usr->usr_id.uid, usr->usr_refcnt, diff --git vmd.h vmd.h index 9010ad6eb9f..8be7db3d059 100644 --- vmd.h +++ vmd.h @@ -67,7 +67,7 @@ /* default user instance limits */ #define VM_DEFAULT_USER_MAXCPU 4 -#define VM_DEFAULT_USER_MAXMEM 2048 +#define VM_DEFAULT_USER_MAXMEM 2L * 1024 * 1024 * 1024 /* 2 GiB */ #define VM_DEFAULT_USER_MAXIFS 8 /* vmd -> vmctl error codes */