diff options
Diffstat (limited to 'sys/dev/vmm/vmm_dev.c')
| -rw-r--r-- | sys/dev/vmm/vmm_dev.c | 23 | 
1 files changed, 15 insertions, 8 deletions
| diff --git a/sys/dev/vmm/vmm_dev.c b/sys/dev/vmm/vmm_dev.c index 4961b21180e1..ebbceb25b69e 100644 --- a/sys/dev/vmm/vmm_dev.c +++ b/sys/dev/vmm/vmm_dev.c @@ -14,6 +14,7 @@  #include <sys/kernel.h>  #include <sys/malloc.h>  #include <sys/mman.h> +#include <sys/priv.h>  #include <sys/proc.h>  #include <sys/queue.h>  #include <sys/sx.h> @@ -470,6 +471,12 @@ vmmdev_ioctl(struct cdev *cdev, u_long cmd, caddr_t data, int fflag,  	if (ioctl == NULL)  		return (ENOTTY); +	if ((ioctl->flags & VMMDEV_IOCTL_PRIV_CHECK_DRIVER) != 0) { +		error = priv_check(td, PRIV_DRIVER); +		if (error != 0) +			return (error); +	} +  	if ((ioctl->flags & VMMDEV_IOCTL_XLOCK_MEMSEGS) != 0)  		vm_xlock_memsegs(sc->vm);  	else if ((ioctl->flags & VMMDEV_IOCTL_SLOCK_MEMSEGS) != 0) @@ -656,10 +663,10 @@ vmmdev_ioctl(struct cdev *cdev, u_long cmd, caddr_t data, int fflag,  			error = EINVAL;  			break;  		} -		regvals = malloc(sizeof(regvals[0]) * vmregset->count, M_VMMDEV, -		    M_WAITOK); -		regnums = malloc(sizeof(regnums[0]) * vmregset->count, M_VMMDEV, -		    M_WAITOK); +		regvals = mallocarray(vmregset->count, sizeof(regvals[0]), +		    M_VMMDEV, M_WAITOK); +		regnums = mallocarray(vmregset->count, sizeof(regnums[0]), +		    M_VMMDEV, M_WAITOK);  		error = copyin(vmregset->regnums, regnums, sizeof(regnums[0]) *  		    vmregset->count);  		if (error == 0) @@ -682,10 +689,10 @@ vmmdev_ioctl(struct cdev *cdev, u_long cmd, caddr_t data, int fflag,  			error = EINVAL;  			break;  		} -		regvals = malloc(sizeof(regvals[0]) * vmregset->count, M_VMMDEV, -		    M_WAITOK); -		regnums = malloc(sizeof(regnums[0]) * vmregset->count, M_VMMDEV, -		    M_WAITOK); +		regvals = mallocarray(vmregset->count, sizeof(regvals[0]), +		    M_VMMDEV, M_WAITOK); +		regnums = mallocarray(vmregset->count, sizeof(regnums[0]), +		    M_VMMDEV, M_WAITOK);  		error = copyin(vmregset->regnums, regnums, sizeof(regnums[0]) *  		    vmregset->count);  		if (error == 0) | 
