SUPDrv-freebsd.c revision 59e8feed5ffd306be4de820c67f766591aaa9b69
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * VBoxDrv - The VirtualBox Support Driver - FreeBSD specifics.
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * Copyright (c) 2007 knut st. osmundsen <bird-src-spam@anduin.net>
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * Permission is hereby granted, free of charge, to any person
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * obtaining a copy of this software and associated documentation
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * files (the "Software"), to deal in the Software without
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * restriction, including without limitation the rights to use,
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * copy, modify, merge, publish, distribute, sublicense, and/or sell
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * copies of the Software, and to permit persons to whom the
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * Software is furnished to do so, subject to the following
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * conditions:
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * The above copyright notice and this permission notice shall be
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * included in all copies or substantial portions of the Software.
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
2fe579c330de95296cd6fb670bf159abb6dcc03dvboxsync * OTHER DEALINGS IN THE SOFTWARE.
7480f639b6e81e4f5583e2dded360b77d3ad58a8vboxsync/*******************************************************************************
baf2adfa199aa60569f503d1ff3ceb11d0b216efvboxsync* Header Files *
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync*******************************************************************************/
b2b3dd040e6419db8733be1dca655675d3c60e04vboxsync/* Deal with conflicts first. */
#include "../SUPDrvInternal.h"
#ifdef VBOX_WITH_HARDENING
static int VBoxDrvFreeBSDLoad(void);
static int VBoxDrvFreeBSDUnload(void);
static int VBoxDrvFreeBSDIOCtlSlow(PSUPDRVSESSION pSession, u_long ulCmd, caddr_t pvData, struct thread *pTd);
* @return 0 on success, errno.h status code on failure.
int rc;
switch (enmEventType)
case MOD_LOAD:
case MOD_UNLOAD:
case MOD_SHUTDOWN:
case MOD_QUIESCE:
return EOPNOTSUPP;
static int VBoxDrvFreeBSDLoad(void)
g_cUsers = 0;
g_pVBoxDrvFreeBSDChrDev = make_dev(&g_VBoxDrvFreeBSDChrDevSW, 0, UID_ROOT, GID_WHEEL, VBOXDRV_PERM, "vboxdrv");
return VINF_SUCCESS;
RTR0Term();
return rc;
static int VBoxDrvFreeBSDUnload(void)
if (g_cUsers > 0)
return EBUSY;
RTR0Term();
return VINF_SUCCESS;
int rc;
return EINVAL;
static int VBoxDrvFreeBSDIOCtl(struct cdev *pDev, u_long ulCmd, caddr_t pvData, int fFile, struct thread *pTd)
static int VBoxDrvFreeBSDIOCtlSlow(PSUPDRVSESSION pSession, u_long ulCmd, caddr_t pvData, struct thread *pTd)
OSDBGPRINT(("VBoxDrvFreeBSDIOCtlSlow: cbReq=%#x < %#x; ulCmd=%#lx\n", cbReq, (int)sizeof(*pHdr), ulCmd));
return EINVAL;
return EINVAL;
OSDBGPRINT(("VBoxDrvFreeBSDIOCtlSlow: max(%#x,%#x) != %#x; ulCmd=%#lx\n", pHdr->cbIn, pHdr->cbOut, cbReq, ulCmd));
return EINVAL;
return rc;
return EINVAL;
return EINVAL;
OSDBGPRINT(("VBoxDrvFreeBSDIOCtlSlow: failed to allocate buffer of %d bytes; ulCmd=%#lx\n", cbReq, ulCmd));
return ENOMEM;
return rc;
return EINVAL;
if (pvUser)
OSDBGPRINT(("VBoxDrvFreeBSDIOCtlSlow: too much output! %#x > %#x; uCmd=%#lx!\n", cbOut, cbReq, ulCmd));
OSDBGPRINT(("VBoxDrvFreeBSDIOCtlSlow: copyout(%p,%p,%#x) -> %d; uCmd=%#lx!\n", pHdr, pvUser, cbOut, rc, ulCmd));
if (pvUser)
return rc;
return VERR_INVALID_POINTER;
if (pSession)
return VERR_INVALID_PARAMETER;
return VERR_INVALID_PARAMETER;
return VERR_INVALID_PARAMETER;
bool VBOXCALL supdrvOSObjCanAccess(PSUPDRVOBJ pObj, PSUPDRVSESSION pSession, const char *pszObjName, int *prc)
int VBOXCALL supdrvOSLdrOpen(PSUPDRVDEVEXT pDevExt, PSUPDRVLDRIMAGE pImage, const char *pszFilename)
return VERR_NOT_SUPPORTED;
int VBOXCALL supdrvOSLdrValidatePointer(PSUPDRVDEVEXT pDevExt, PSUPDRVLDRIMAGE pImage, void *pv, const uint8_t *pbImageBits)
return VERR_NOT_SUPPORTED;
int VBOXCALL supdrvOSLdrLoad(PSUPDRVDEVEXT pDevExt, PSUPDRVLDRIMAGE pImage, const uint8_t *pbImageBits, PSUPLDRLOAD pReq)
return VERR_NOT_SUPPORTED;
int cch;
return cch;