Package: virtualbox-dkms
Version: 5.1.8-dfsg-6~bpo8+2
Severity: important
Tags: patch

Dear Maintainer,
I'm running kernels from backports on a few development machines. With the
latest version 4.9.0, virtualbox dkms does not compile any more.
The problem is related to a small change in kernel API, I include a patch.

Regards,

Antonio

-- System Information:
Debian Release: 8.7
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.8.0-0.bpo.2-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages virtualbox-dkms depends on:
ii  dkms  2.2.0.3-2

Versions of packages virtualbox-dkms recommends:
ii  virtualbox  5.1.8-dfsg-6~bpo8+2

virtualbox-dkms suggests no packages.

-- no debconf information
--- r0drv/linux/memobj-r0drv-linux.c.dist	2017-03-02 08:27:07.162465346 +0100
+++ r0drv/linux/memobj-r0drv-linux.c	2017-03-02 08:26:39.489366319 +0100
@@ -1045,7 +1045,27 @@
         /*
          * Get user pages.
          */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
+        if (R0Process == RTR0ProcHandleSelf())
+            rc = get_user_pages(R3Ptr,                  /* Where from. */
+                                cPages,                 /* How many pages. */
+                                fWrite ? FOLL_WRITE | FOLL_FORCE : 0, /* Write to memory, force write access. */
+                                &pMemLnx->apPages[0],   /* Page array. */
+                                papVMAs);               /* vmas */
+        /*
+         * Actually this should not happen at the moment as call this function
+         * only for our own process.
+         */
+        else
+            rc = get_user_pages_remote(
+                                pTask,                  /* Task for fault accounting. */
+                                pTask->mm,              /* Whose pages. */
+                                R3Ptr,                  /* Where from. */
+                                cPages,                 /* How many pages. */
+                                fWrite ? FOLL_WRITE | FOLL_FORCE : 0, /* Write to memory, force write access. */
+                                &pMemLnx->apPages[0],   /* Page array. */
+                                papVMAs);               /* vmas */
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
         if (R0Process == RTR0ProcHandleSelf())
             rc = get_user_pages(R3Ptr,                  /* Where from. */
                                 cPages,                 /* How many pages. */

Reply via email to