#include <linux/kernel.h>
#include <linux/miscdevice.h>
#include <linux/module.h>
#include <linux/vbox_utils.h>
#include "vboxguest_core.h"
#define DEVICE_NAME "vboxguest"
#define DEVICE_NAME_USER "vboxuser"
#define VBOX_VENDORID 0x80ee
#define VMMDEV_DEVICEID 0xcafe
static DEFINE_MUTEX(vbg_gdev_mutex);
static struct vbg_dev *vbg_gdev;
static u32 vbg_misc_device_requestor(struct inode *inode)
u32 requestor = VMMDEV_REQUESTOR_USERMODE |
VMMDEV_REQUESTOR_CON_DONT_KNOW |
VMMDEV_REQUESTOR_TRUST_NOT_GIVEN;
if (from_kuid(current_user_ns(), current->cred->uid) == 0)
requestor |= VMMDEV_REQUESTOR_USR_ROOT;
requestor |= VMMDEV_REQUESTOR_USR_USER;
if (in_egroup_p(inode->i_gid))
requestor |= VMMDEV_REQUESTOR_GRP_VBOX;
static int vbg_misc_device_open(struct inode *inode, struct file *filp)
struct vbg_session *session;
gdev = container_of(filp->private_data, struct vbg_dev, misc_device);
session = vbg_core_open_session(gdev, vbg_misc_device_requestor(inode));
filp->private_data = session;