-Source: http://ports.ubuntu.com/pool/multiverse/v/virtualbox/virtualbox-guest-dkms_5.2.6-dfsg-5_all.deb
-Version: 5.2.6-dfsg-5
+Source: http://ports.ubuntu.com/pool/multiverse/v/virtualbox/virtualbox-guest-dkms_5.2.8-dfsg-2_all.deb
+Version: 5.2.8-dfsg-2
PACKAGE_NAME="virtualbox-guest"
-PACKAGE_VERSION="5.2.6"
+PACKAGE_VERSION="5.2.8"
CLEAN="rm -f *.*o"
BUILT_MODULE_NAME[0]="vboxguest"
BUILT_MODULE_LOCATION[0]="vboxguest"
-/* $Rev: 118839 $ */
+/* $Rev: 120349 $ */
/** @file
* VBoxGuest - Linux specifics.
*
# define VBOXGUEST_WITH_INPUT_DRIVER
#endif
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
+# define CONST_4_15 const
+#else
+# define CONST_4_15
+#endif
+
#include "VBoxGuestInternal.h"
#ifdef VBOXGUEST_WITH_INPUT_DRIVER
# include <linux/input.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
/** log and dbg_log parameter setter. */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
-static int vgdrvLinuxParamLogGrpSet(const char *pszValue, const struct kernel_param *pParam)
-#else
-static int vgdrvLinuxParamLogGrpSet(const char *pszValue, struct kernel_param *pParam)
-#endif
+static int vgdrvLinuxParamLogGrpSet(const char *pszValue, CONST_4_15 struct kernel_param *pParam)
{
if (g_fLoggerCreated)
{
}
/** log and dbg_log parameter getter. */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
-static int vgdrvLinuxParamLogGrpGet(char *pszBuf, const struct kernel_param *pParam)
-#else
-static int vgdrvLinuxParamLogGrpGet(char *pszBuf, struct kernel_param *pParam)
-#endif
+static int vgdrvLinuxParamLogGrpGet(char *pszBuf, CONST_4_15 struct kernel_param *pParam)
{
PRTLOGGER pLogger = pParam->name[0] == 'd' ? RTLogDefaultInstance() : RTLogRelGetDefaultInstance();
*pszBuf = '\0';
/** log and dbg_log_flags parameter setter. */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
-static int vgdrvLinuxParamLogFlagsSet(const char *pszValue, const struct kernel_param *pParam)
-#else
-static int vgdrvLinuxParamLogFlagsSet(const char *pszValue, struct kernel_param *pParam)
-#endif
+static int vgdrvLinuxParamLogFlagsSet(const char *pszValue, CONST_4_15 struct kernel_param *pParam)
{
if (g_fLoggerCreated)
{
}
/** log and dbg_log_flags parameter getter. */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
-static int vgdrvLinuxParamLogFlagsGet(char *pszBuf, const struct kernel_param *pParam)
-#else
-static int vgdrvLinuxParamLogFlagsGet(char *pszBuf, struct kernel_param *pParam)
-#endif
+static int vgdrvLinuxParamLogFlagsGet(char *pszBuf, CONST_4_15 struct kernel_param *pParam)
{
PRTLOGGER pLogger = pParam->name[0] == 'd' ? RTLogDefaultInstance() : RTLogRelGetDefaultInstance();
*pszBuf = '\0';
/** log and dbg_log_dest parameter setter. */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
-static int vgdrvLinuxParamLogDstSet(const char *pszValue, const struct kernel_param *pParam)
-#else
-static int vgdrvLinuxParamLogDstSet(const char *pszValue, struct kernel_param *pParam)
-#endif
+static int vgdrvLinuxParamLogDstSet(const char *pszValue, CONST_4_15 struct kernel_param *pParam)
{
if (g_fLoggerCreated)
{
}
/** log and dbg_log_dest parameter getter. */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
-static int vgdrvLinuxParamLogDstGet(char *pszBuf, const struct kernel_param *pParam)
-#else
-static int vgdrvLinuxParamLogDstGet(char *pszBuf, struct kernel_param *pParam)
-#endif
+static int vgdrvLinuxParamLogDstGet(char *pszBuf, CONST_4_15 struct kernel_param *pParam)
{
PRTLOGGER pLogger = pParam->name[0] == 'd' ? RTLogDefaultInstance() : RTLogRelGetDefaultInstance();
*pszBuf = '\0';
/** r3_log_to_host parameter setter. */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
-static int vgdrvLinuxParamR3LogToHostSet(const char *pszValue, const struct kernel_param *pParam)
-#else
-static int vgdrvLinuxParamR3LogToHostSet(const char *pszValue, struct kernel_param *pParam)
-#endif
+static int vgdrvLinuxParamR3LogToHostSet(const char *pszValue, CONST_4_15 struct kernel_param *pParam)
{
if ( pszValue == NULL
|| *pszValue == '\0'
}
/** r3_log_to_host parameter getter. */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
-static int vgdrvLinuxParamR3LogToHostGet(char *pszBuf, const struct kernel_param *pParam)
-#else
-static int vgdrvLinuxParamR3LogToHostGet(char *pszBuf, struct kernel_param *pParam)
-#endif
+static int vgdrvLinuxParamR3LogToHostGet(char *pszBuf, CONST_4_15 struct kernel_param *pParam)
{
strcpy(pszBuf, g_DevExt.fLoggingEnabled ? "enabled" : "disabled");
return strlen(pszBuf);
/** The min nano second into the min day. (1677-09-21T00-12-43.145224192) */
#define RTTIME_MIN_DAY_NANO ( INT64_C(1000000000) * (00*3600 + 12*60 + 43) + 145224192 )
+/**
+ * Asserts that a_pTime is normalized.
+ */
+#define RTTIME_ASSERT_NORMALIZED(a_pTime) \
+ do \
+ { \
+ Assert(RT_ABS((a_pTime)->offUTC) <= 840); \
+ Assert((a_pTime)->u32Nanosecond < 1000000000); \
+ Assert((a_pTime)->u8Second < 60); \
+ Assert((a_pTime)->u8Minute < 60); \
+ Assert((a_pTime)->u8Hour < 24); \
+ Assert((a_pTime)->u8Month >= 1 && (a_pTime)->u8Month <= 12); \
+ Assert((a_pTime)->u8WeekDay < 7); \
+ Assert((a_pTime)->u16YearDay >= 1); \
+ Assert((a_pTime)->u16YearDay <= (rtTimeIsLeapYear((a_pTime)->i32Year) ? 366 : 365)); \
+ Assert((a_pTime)->u8MonthDay >= 1 && (a_pTime)->u8MonthDay <= 31); \
+ } while (0)
+
/*********************************************************************************************************************************
* Global Variables *
}
RT_EXPORT_SYMBOL(RTTimeSpecFromString);
+
+/**
+ * Adds one day to @a pTime.
+ *
+ * ASSUMES it is zulu time so DST can be ignored.
+ */
+static PRTTIME rtTimeAdd1Day(PRTTIME pTime)
+{
+ Assert(!pTime->offUTC);
+ rtTimeNormalizeInternal(pTime);
+ pTime->u8MonthDay += 1;
+ pTime->u16YearDay = 0;
+ return rtTimeNormalizeInternal(pTime);
+}
+
+
+/**
+ * Subtracts one day from @a pTime.
+ *
+ * ASSUMES it is zulu time so DST can be ignored.
+ */
+static PRTTIME rtTimeSub1Day(PRTTIME pTime)
+{
+ Assert(!pTime->offUTC);
+ rtTimeNormalizeInternal(pTime);
+ if (pTime->u16YearDay > 1)
+ {
+ pTime->u16YearDay -= 0;
+ pTime->u8Month = 0;
+ pTime->u8MonthDay = 0;
+ }
+ else
+ {
+ pTime->i32Year -= 1;
+ pTime->u16YearDay = rtTimeIsLeapYear(pTime->i32Year) ? 366 : 365;
+ pTime->u8MonthDay = 31;
+ pTime->u8Month = 12;
+ }
+ return rtTimeNormalizeInternal(pTime);
+}
+
+
+/**
+ * Adds a signed number of minutes to @a pTime.
+ *
+ * ASSUMES it is zulu time so DST can be ignored.
+ *
+ * @param pTime The time structure to work on.
+ * @param cAddend Number of minutes to add.
+ * ASSUMES the value isn't all that high!
+ */
+static PRTTIME rtTimeAddMinutes(PRTTIME pTime, int32_t cAddend)
+{
+ Assert(RT_ABS(cAddend) < 31 * 24 * 60);
+
+ /*
+ * Work on minutes of the day.
+ */
+ int32_t const cMinutesInDay = 24 * 60;
+ int32_t iDayMinute = (unsigned)pTime->u8Hour * 60 + pTime->u8Minute;
+ iDayMinute += cAddend;
+
+ while (iDayMinute >= cMinutesInDay)
+ {
+ rtTimeAdd1Day(pTime);
+ iDayMinute -= cMinutesInDay;
+ }
+
+ while (iDayMinute < 0)
+ {
+ rtTimeSub1Day(pTime);
+ iDayMinute += cMinutesInDay;
+ }
+
+ pTime->u8Hour = iDayMinute / 60;
+ pTime->u8Minute = iDayMinute % 60;
+
+ return pTime;
+}
+
+
+/**
+ * Converts @a pTime to zulu time (UTC) if needed.
+ *
+ * @returns pTime.
+ * @param pTime What to convers (in/out).
+ */
+static PRTTIME rtTimeConvertToZulu(PRTTIME pTime)
+{
+ RTTIME_ASSERT_NORMALIZED(pTime);
+ if ((pTime->fFlags & RTTIME_FLAGS_TYPE_MASK) != RTTIME_FLAGS_TYPE_UTC)
+ {
+ int32_t offUTC = pTime->offUTC;
+ pTime->offUTC = 0;
+ pTime->fFlags &= ~RTTIME_FLAGS_TYPE_MASK;
+ pTime->fFlags |= RTTIME_FLAGS_TYPE_UTC;
+ if (offUTC != 0)
+ rtTimeAddMinutes(pTime, offUTC);
+ }
+ return pTime;
+}
+
+
+/**
+ * Compares two normalized time structures.
+ *
+ * @retval 0 if equal.
+ * @retval -1 if @a pLeft is earlier than @a pRight.
+ * @retval 1 if @a pRight is earlier than @a pLeft.
+ *
+ * @param pLeft The left side time. NULL is accepted.
+ * @param pRight The right side time. NULL is accepted.
+ *
+ * @note A NULL time is considered smaller than anything else. If both are
+ * NULL, they are considered equal.
+ */
+RTDECL(int) RTTimeCompare(PCRTTIME pLeft, PCRTTIME pRight)
+{
+#ifdef RT_STRICT
+ if (pLeft)
+ RTTIME_ASSERT_NORMALIZED(pLeft);
+ if (pRight)
+ RTTIME_ASSERT_NORMALIZED(pRight);
+#endif
+
+ int iRet;
+ if (pLeft)
+ {
+ if (pRight)
+ {
+ /*
+ * Only work with normalized zulu time.
+ */
+ RTTIME TmpLeft;
+ if ( pLeft->offUTC != 0
+ || pLeft->u16YearDay == 0
+ || pLeft->u16YearDay > 366
+ || pLeft->u8Hour >= 60
+ || pLeft->u8Minute >= 60
+ || pLeft->u8Second >= 60)
+ {
+ TmpLeft = *pLeft;
+ pLeft = rtTimeConvertToZulu(rtTimeNormalizeInternal(&TmpLeft));
+ }
+
+ RTTIME TmpRight;
+ if ( pRight->offUTC != 0
+ || pRight->u16YearDay == 0
+ || pRight->u16YearDay > 366
+ || pRight->u8Hour >= 60
+ || pRight->u8Minute >= 60
+ || pRight->u8Second >= 60)
+ {
+ TmpRight = *pRight;
+ pRight = rtTimeConvertToZulu(rtTimeNormalizeInternal(&TmpRight));
+ }
+
+ /*
+ * Do the comparison.
+ */
+ if ( pLeft->i32Year != pRight->i32Year)
+ iRet = pLeft->i32Year < pRight->i32Year ? -1 : 1;
+ else if ( pLeft->u16YearDay != pRight->u16YearDay)
+ iRet = pLeft->u16YearDay < pRight->u16YearDay ? -1 : 1;
+ else if ( pLeft->u8Hour != pRight->u8Hour)
+ iRet = pLeft->u8Hour < pRight->u8Hour ? -1 : 1;
+ else if ( pLeft->u8Minute != pRight->u8Minute)
+ iRet = pLeft->u8Minute < pRight->u8Minute ? -1 : 1;
+ else if ( pLeft->u8Second != pRight->u8Second)
+ iRet = pLeft->u8Second < pRight->u8Second ? -1 : 1;
+ else if ( pLeft->u32Nanosecond != pRight->u32Nanosecond)
+ iRet = pLeft->u32Nanosecond < pRight->u32Nanosecond ? -1 : 1;
+ else
+ iRet = 0;
+ }
+ else
+ iRet = 1;
+ }
+ else
+ iRet = pRight ? -1 : 0;
+ return iRet;
+}
+RT_EXPORT_SYMBOL(RTTimeCompare);
+
#define VERR_SUPDRV_NOT_BUDDING_VM_PROCESS_1 (-3748)
/** The process trying to open VBoxDrv is not a budding VM process (2). */
#define VERR_SUPDRV_NOT_BUDDING_VM_PROCESS_2 (-3749)
+
+/** Raw-mode is unavailable courtesy of Hyper-V. */
+#define VERR_SUPDRV_NO_RAW_MODE_HYPER_V_ROOT (-7000)
/** @} */
# define RTThreadWait RT_MANGLER(RTThreadWait)
# define RTThreadWaitNoResume RT_MANGLER(RTThreadWaitNoResume)
# define RTThreadYield RT_MANGLER(RTThreadYield)
+# define RTTimeCompare RT_MANGLER(RTTimeCompare)
# define RTTimeDbgBad RT_MANGLER(RTTimeDbgBad)
# define RTTimeDbgExpired RT_MANGLER(RTTimeDbgExpired)
# define RTTimeDbgRaces RT_MANGLER(RTTimeDbgRaces)
*/
RTDECL(bool) RTTimeIsLeapYear(int32_t i32Year);
+/**
+ * Compares two normalized time structures.
+ *
+ * @retval 0 if equal.
+ * @retval -1 if @a pLeft is earlier than @a pRight.
+ * @retval 1 if @a pRight is earlier than @a pLeft.
+ *
+ * @param pLeft The left side time. NULL is accepted.
+ * @param pRight The right side time. NULL is accepted.
+ *
+ * @note A NULL time is considered smaller than anything else. If both are
+ * NULL, they are considered equal.
+ */
+RTDECL(int) RTTimeCompare(PCRTTIME pLeft, PCRTTIME pRight);
+
/**
* Gets the current nanosecond timestamp.
*
/** EDX Bit 27 - IBRS & IBPB - Supports the STIBP flag in IA32_SPEC_CTRL. */
#define X86_CPUID_STEXT_FEATURE_EDX_STIBP RT_BIT_32(27)
-/** EDX Bit 29 - ARCHCAP - Supports the IA32_ARCH_CAP MSR. */
+/** EDX Bit 29 - ARCHCAP - Supports the IA32_ARCH_CAPABILITIES MSR. */
#define X86_CPUID_STEXT_FEATURE_EDX_ARCHCAP RT_BIT_32(29)
/** @} */
#define X86_CR4_VMXE RT_BIT_32(13)
/** Bit 14 - SMXE - Safer Mode Extensions Enabled. */
#define X86_CR4_SMXE RT_BIT_32(14)
+/** Bit 16 - FSGSBASE - Read/write FSGSBASE instructions Enable. */
+#define X86_CR4_FSGSBASE RT_BIT_32(16)
/** Bit 17 - PCIDE - Process-Context Identifiers Enabled. */
#define X86_CR4_PCIDE RT_BIT_32(17)
/** Bit 18 - OSXSAVE - Operating System Support for XSAVE and processor
/** Architecture capabilities (bugfixes).
* @note May move */
-#define MSR_IA32_ARCH_CAP UINT32_C(0x10a)
+#define MSR_IA32_ARCH_CAPABILITIES UINT32_C(0x10a)
/** CPU is no subject to spectre problems. */
#define MSR_IA32_ARCH_CAP_F_SPECTRE_FIX RT_BIT_32(0)
/** CPU has better IBRS and you can leave it on all the time. */
/** @} */
+/**
+ * Intel PCID invalidation types.
+ */
+/** Individual address invalidation. */
+#define X86_INVPCID_TYPE_INDV_ADDR 0
+/** Single-context invalidation. */
+#define X86_INVPCID_TYPE_SINGLE_CONTEXT 1
+/** All-context including globals invalidation. */
+#define X86_INVPCID_TYPE_ALL_CONTEXT_INCL_GLOBAL 2
+/** All-context excluding globals invalidation. */
+#define X86_INVPCID_TYPE_ALL_CONTEXT_EXCL_GLOBAL 3
+/** The maximum valid invalidation type value. */
+#define X86_INVPCID_TYPE_MAX_VALID X86_INVPCID_TYPE_ALL_CONTEXT_EXCL_GLOBAL
+
/**
* 32-bit protected mode FSTENV image.
*/
-#define VBOX_SVN_REV 120293
+#define VBOX_SVN_REV 120774
#define VBOX_VERSION_MAJOR 5
#define VBOX_VERSION_MINOR 2
-#define VBOX_VERSION_BUILD 6
-#define VBOX_VERSION_STRING_RAW "5.2.6"
-#define VBOX_VERSION_STRING "5.2.6_KernelUbuntu"
+#define VBOX_VERSION_BUILD 8
+#define VBOX_VERSION_STRING_RAW "5.2.8"
+#define VBOX_VERSION_STRING "5.2.8_KernelUbuntu"
#define VBOX_API_VERSION_STRING "5_2"
#define VBOX_PRIVATE_BUILD_DESC "Private build by buildd"
#define VERR_SUPDRV_NOT_BUDDING_VM_PROCESS_1 (-3748)
/** The process trying to open VBoxDrv is not a budding VM process (2). */
#define VERR_SUPDRV_NOT_BUDDING_VM_PROCESS_2 (-3749)
+
+/** Raw-mode is unavailable courtesy of Hyper-V. */
+#define VERR_SUPDRV_NO_RAW_MODE_HYPER_V_ROOT (-7000)
/** @} */
pDst->ChangeTime = pSrc->ChangeTime;
pDst->BirthTime = pSrc->BirthTime;
pDst->Attr.fMode = pSrc->Attr.fMode;
+ /* Clear bits which we don't pass through for security reasons. */
+ pDst->Attr.fMode &= ~(RTFS_UNIX_ISUID | RTFS_UNIX_ISGID | RTFS_UNIX_ISTXT);
RT_ZERO(pDst->Attr.u);
switch (pSrc->Attr.enmAdditional)
{
# define RTThreadWait RT_MANGLER(RTThreadWait)
# define RTThreadWaitNoResume RT_MANGLER(RTThreadWaitNoResume)
# define RTThreadYield RT_MANGLER(RTThreadYield)
+# define RTTimeCompare RT_MANGLER(RTTimeCompare)
# define RTTimeDbgBad RT_MANGLER(RTTimeDbgBad)
# define RTTimeDbgExpired RT_MANGLER(RTTimeDbgExpired)
# define RTTimeDbgRaces RT_MANGLER(RTTimeDbgRaces)
*/
RTDECL(bool) RTTimeIsLeapYear(int32_t i32Year);
+/**
+ * Compares two normalized time structures.
+ *
+ * @retval 0 if equal.
+ * @retval -1 if @a pLeft is earlier than @a pRight.
+ * @retval 1 if @a pRight is earlier than @a pLeft.
+ *
+ * @param pLeft The left side time. NULL is accepted.
+ * @param pRight The right side time. NULL is accepted.
+ *
+ * @note A NULL time is considered smaller than anything else. If both are
+ * NULL, they are considered equal.
+ */
+RTDECL(int) RTTimeCompare(PCRTTIME pLeft, PCRTTIME pRight);
+
/**
* Gets the current nanosecond timestamp.
*
-#define VBOX_SVN_REV 120293
+#define VBOX_SVN_REV 120774
#define VBOX_VERSION_MAJOR 5
#define VBOX_VERSION_MINOR 2
-#define VBOX_VERSION_BUILD 6
-#define VBOX_VERSION_STRING_RAW "5.2.6"
-#define VBOX_VERSION_STRING "5.2.6_KernelUbuntu"
+#define VBOX_VERSION_BUILD 8
+#define VBOX_VERSION_STRING_RAW "5.2.8"
+#define VBOX_VERSION_STRING "5.2.8_KernelUbuntu"
#define VBOX_API_VERSION_STRING "5_2"
#define VBOX_PRIVATE_BUILD_DESC "Private build by buildd"
-#define VBOX_SVN_REV 120293
+#define VBOX_SVN_REV 120774
#define VBOX_VERSION_MAJOR 5
#define VBOX_VERSION_MINOR 2
-#define VBOX_VERSION_BUILD 6
-#define VBOX_VERSION_STRING_RAW "5.2.6"
-#define VBOX_VERSION_STRING "5.2.6_KernelUbuntu"
+#define VBOX_VERSION_BUILD 8
+#define VBOX_VERSION_STRING_RAW "5.2.8"
+#define VBOX_VERSION_STRING "5.2.8_KernelUbuntu"
#define VBOX_API_VERSION_STRING "5_2"
#define VBOX_PRIVATE_BUILD_DESC "Private build by buildd"