Last active
September 18, 2017 18:20
-
-
Save knokmki612/220c9d502ac3ff0d15f80b06bc5f4873 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -urN --no-dereference a/r0drv/linux/alloc-r0drv-linux.c b/r0drv/linux/alloc-r0drv-linux.c | |
--- a/r0drv/linux/alloc-r0drv-linux.c 2017-04-29 00:04:49.000000000 +0900 | |
+++ b/r0drv/linux/alloc-r0drv-linux.c 2017-09-08 02:12:19.325178643 +0900 | |
@@ -35,7 +35,10 @@ | |
#include <iprt/assert.h> | |
#include <iprt/err.h> | |
#include "r0drv/alloc-r0drv.h" | |
- | |
+#include <linux/kmemleak.h> | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) | |
+#include <asm/set_memory.h> | |
+#endif | |
#if (defined(RT_ARCH_AMD64) || defined(DOXYGEN_RUNNING)) && !defined(RTMEMALLOC_EXEC_HEAP) | |
# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 23) | |
diff -urN --no-dereference a/r0drv/linux/memobj-r0drv-linux.c b/r0drv/linux/memobj-r0drv-linux.c | |
--- a/r0drv/linux/memobj-r0drv-linux.c 2017-04-29 00:04:49.000000000 +0900 | |
+++ b/r0drv/linux/memobj-r0drv-linux.c 2017-09-08 02:12:19.325178643 +0900 | |
@@ -899,6 +899,9 @@ | |
unsigned long pfn; | |
struct page *pPage; | |
pte_t *pEntry; | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) | |
+ p4d_t p4d; | |
+#endif | |
union | |
{ | |
pgd_t Global; | |
@@ -917,9 +920,18 @@ | |
u.Global = *pgd_offset(current->active_mm, ulAddr); | |
if (RT_UNLIKELY(pgd_none(u.Global))) | |
return NULL; | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) | |
+ p4d = *p4d_offset(&u.Global, ulAddr); | |
+ if (RT_UNLIKELY(p4d_none(p4d) || p4d_large(p4d) || !p4d_present(p4d))) | |
+ return NULL; | |
+#endif | |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) | |
+ u.Upper = *pud_offset(&p4d, ulAddr); | |
+#else | |
u.Upper = *pud_offset(&u.Global, ulAddr); | |
+#endif | |
if (RT_UNLIKELY(pud_none(u.Upper))) | |
return NULL; | |
# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) | |
@@ -1463,13 +1475,23 @@ | |
{ | |
int rc = -ENOMEM; | |
pgd_t *pgd; | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) | |
+ p4d_t *p4d; | |
+#endif | |
spin_lock(&mm->page_table_lock); | |
pgd = pgd_offset(mm, ulAddr); | |
if (!pgd_none(*pgd) && !pgd_bad(*pgd)) | |
{ | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) | |
+ p4d = p4d_offset(*pgd, ulAddr); | |
+ if (p4d_none(*p4d)) | |
+ goto exit; | |
+ pmd_t *pmd = pmd_offset(p4d, ulAddr); | |
+#else | |
pmd_t *pmd = pmd_offset(pgd, ulAddr); | |
+#endif | |
if (!pmd_none(*pmd)) | |
{ | |
pte_t *ptep = pte_offset_map(pmd, ulAddr); | |
@@ -1487,6 +1509,9 @@ | |
} | |
} | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) | |
+exit: | |
+#endif | |
spin_unlock(&mm->page_table_lock); | |
return rc; | |
} | |
diff -urN --no-dereference a/r0drv/linux/waitqueue-r0drv-linux.h b/r0drv/linux/waitqueue-r0drv-linux.h | |
--- a/r0drv/linux/waitqueue-r0drv-linux.h 2017-04-29 00:04:49.000000000 +0900 | |
+++ b/r0drv/linux/waitqueue-r0drv-linux.h 2017-09-08 02:12:19.326178869 +0900 | |
@@ -46,7 +46,7 @@ | |
typedef struct RTR0SEMLNXWAIT | |
{ | |
/** The wait queue entry. */ | |
- wait_queue_t WaitQE; | |
+ wait_queue_entry_t WaitQE; | |
/** The absolute timeout given as nano seconds since the start of the | |
* monotonic clock. */ | |
uint64_t uNsAbsTimeout; | |
diff -urN --no-dereference a/vboxdrv/linux/SUPDrv-linux.c b/vboxdrv/linux/SUPDrv-linux.c | |
--- a/vboxdrv/linux/SUPDrv-linux.c 2017-04-29 00:04:14.000000000 +0900 | |
+++ b/vboxdrv/linux/SUPDrv-linux.c 2017-09-08 02:12:19.331179999 +0900 | |
@@ -1397,7 +1397,7 @@ | |
SUPR0DECL(uint32_t) SUPR0GetKernelFeatures(void) | |
{ | |
uint32_t fFlags = 0; | |
-#ifdef CONFIG_PAX_KERNEXEC | |
+#if defined(CONFIG_PAX_KERNEXEC) || LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) | |
fFlags |= SUPKERNELFEATURES_GDT_READ_ONLY; | |
#endif | |
#if defined(VBOX_STRICT) || defined(VBOX_WITH_EFLAGS_AC_SET_IN_VBOXDRV) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment