Date: Wednesday, April 11, 2018 @ 20:40:42
  Author: heftig
Revision: 321596

4.16.1-1

Added:
  linux/trunk/0004-Fix-vboxguest-on-guests-with-more-than-4G-RAM.patch
Modified:
  linux/trunk/0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
  linux/trunk/0002-drm-i915-edp-Only-use-the-alternate-fixed-mode-if-it.patch
  linux/trunk/0003-Partially-revert-swiotlb-remove-various-exports.patch
  linux/trunk/PKGBUILD
  linux/trunk/config

-----------------------------------------------------------------+
 0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch |    6 
 0002-drm-i915-edp-Only-use-the-alternate-fixed-mode-if-it.patch |   10 
 0003-Partially-revert-swiotlb-remove-various-exports.patch      |   10 
 0004-Fix-vboxguest-on-guests-with-more-than-4G-RAM.patch        |  552 
++++++++++
 PKGBUILD                                                        |   23 
 config                                                          |    2 
 6 files changed, 581 insertions(+), 22 deletions(-)

Modified: 0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
===================================================================
--- 0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch     
2018-04-11 20:26:44 UTC (rev 321595)
+++ 0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch     
2018-04-11 20:40:42 UTC (rev 321596)
@@ -1,8 +1,8 @@
-From ed80ff656462322e0bc7813d736800321097e10a Mon Sep 17 00:00:00 2001
-Message-Id: 
<ed80ff656462322e0bc7813d736800321097e10a.1523024759.git.jan.steff...@gmail.com>
+From 2c2e2c3c7057a347aad9dbfc61fa87e787de33e7 Mon Sep 17 00:00:00 2001
+Message-Id: 
<2c2e2c3c7057a347aad9dbfc61fa87e787de33e7.1523475032.git.jan.steff...@gmail.com>
 From: Serge Hallyn <serge.hal...@canonical.com>
 Date: Fri, 31 May 2013 19:12:12 +0100
-Subject: [PATCH 1/3] add sysctl to disallow unprivileged CLONE_NEWUSER by
+Subject: [PATCH 1/4] add sysctl to disallow unprivileged CLONE_NEWUSER by
  default
 
 Signed-off-by: Serge Hallyn <serge.hal...@ubuntu.com>

Modified: 0002-drm-i915-edp-Only-use-the-alternate-fixed-mode-if-it.patch
===================================================================
--- 0002-drm-i915-edp-Only-use-the-alternate-fixed-mode-if-it.patch     
2018-04-11 20:26:44 UTC (rev 321595)
+++ 0002-drm-i915-edp-Only-use-the-alternate-fixed-mode-if-it.patch     
2018-04-11 20:40:42 UTC (rev 321596)
@@ -1,10 +1,10 @@
-From 7f7ff058a768b93f6a8592f3540471a93aef9a27 Mon Sep 17 00:00:00 2001
-Message-Id: 
<7f7ff058a768b93f6a8592f3540471a93aef9a27.1523024759.git.jan.steff...@gmail.com>
-In-Reply-To: 
<ed80ff656462322e0bc7813d736800321097e10a.1523024759.git.jan.steff...@gmail.com>
-References: 
<ed80ff656462322e0bc7813d736800321097e10a.1523024759.git.jan.steff...@gmail.com>
+From 2db81464580bf74253236491d255c9b482dca39e Mon Sep 17 00:00:00 2001
+Message-Id: 
<2db81464580bf74253236491d255c9b482dca39e.1523475032.git.jan.steff...@gmail.com>
+In-Reply-To: 
<2c2e2c3c7057a347aad9dbfc61fa87e787de33e7.1523475032.git.jan.steff...@gmail.com>
+References: 
<2c2e2c3c7057a347aad9dbfc61fa87e787de33e7.1523475032.git.jan.steff...@gmail.com>
 From: Jim Bride <jim.br...@linux.intel.com>
 Date: Mon, 6 Nov 2017 13:38:57 -0800
-Subject: [PATCH 2/3] drm/i915/edp: Only use the alternate fixed mode if it's
+Subject: [PATCH 2/4] drm/i915/edp: Only use the alternate fixed mode if it's
  asked for
 
 In commit dc911f5bd8aa ("drm/i915/edp: Allow alternate fixed mode for

Modified: 0003-Partially-revert-swiotlb-remove-various-exports.patch
===================================================================
--- 0003-Partially-revert-swiotlb-remove-various-exports.patch  2018-04-11 
20:26:44 UTC (rev 321595)
+++ 0003-Partially-revert-swiotlb-remove-various-exports.patch  2018-04-11 
20:40:42 UTC (rev 321596)
@@ -1,10 +1,10 @@
-From b7c4c2b34e729c1f6f617a8e2aa1dec3e28fdf5c Mon Sep 17 00:00:00 2001
-Message-Id: 
<b7c4c2b34e729c1f6f617a8e2aa1dec3e28fdf5c.1523024759.git.jan.steff...@gmail.com>
-In-Reply-To: 
<ed80ff656462322e0bc7813d736800321097e10a.1523024759.git.jan.steff...@gmail.com>
-References: 
<ed80ff656462322e0bc7813d736800321097e10a.1523024759.git.jan.steff...@gmail.com>
+From 8b658f0ca1bea1ed3b2cbec9648361757a1b1f32 Mon Sep 17 00:00:00 2001
+Message-Id: 
<8b658f0ca1bea1ed3b2cbec9648361757a1b1f32.1523475032.git.jan.steff...@gmail.com>
+In-Reply-To: 
<2c2e2c3c7057a347aad9dbfc61fa87e787de33e7.1523475032.git.jan.steff...@gmail.com>
+References: 
<2c2e2c3c7057a347aad9dbfc61fa87e787de33e7.1523475032.git.jan.steff...@gmail.com>
 From: "Jan Alexander Steffens (heftig)" <jan.steff...@gmail.com>
 Date: Fri, 6 Apr 2018 16:19:38 +0200
-Subject: [PATCH 3/3] Partially revert "swiotlb: remove various exports"
+Subject: [PATCH 3/4] Partially revert "swiotlb: remove various exports"
 
 This partially reverts commit 4bd89ed39b2ab8dc4ac4b6c59b07d420b0213bec.
 The proprietary NVIDIA driver needs one of the exports.

Added: 0004-Fix-vboxguest-on-guests-with-more-than-4G-RAM.patch
===================================================================
--- 0004-Fix-vboxguest-on-guests-with-more-than-4G-RAM.patch                    
        (rev 0)
+++ 0004-Fix-vboxguest-on-guests-with-more-than-4G-RAM.patch    2018-04-11 
20:40:42 UTC (rev 321596)
@@ -0,0 +1,552 @@
+From 113d4b8b5be49c6186cdd358fee1099c329fc334 Mon Sep 17 00:00:00 2001
+Message-Id: 
<113d4b8b5be49c6186cdd358fee1099c329fc334.1523475032.git.jan.steff...@gmail.com>
+In-Reply-To: 
<2c2e2c3c7057a347aad9dbfc61fa87e787de33e7.1523475032.git.jan.steff...@gmail.com>
+References: 
<2c2e2c3c7057a347aad9dbfc61fa87e787de33e7.1523475032.git.jan.steff...@gmail.com>
+From: "Jan Alexander Steffens (heftig)" <jan.steff...@gmail.com>
+Date: Wed, 11 Apr 2018 21:27:44 +0200
+Subject: [PATCH 4/4] Fix vboxguest on guests with more than 4G RAM
+
+Squashed commit of the following:
+
+commit 042b191f6b98165d6bcca3ae09a0f9b289d6155e
+Author: Hans de Goede <hdego...@redhat.com>
+Date:   Thu Mar 29 17:28:57 2018 +0200
+
+    virt: vbox: Log an error when we fail to get the host version
+
+    This was the only error path during probe without a message being logged
+    about what went wrong, this fixes this.
+
+    Signed-off-by: Hans de Goede <hdego...@redhat.com>
+
+commit e4111a6c617687f7cb414ddfa8176206910db76e
+Author: Hans de Goede <hdego...@redhat.com>
+Date:   Thu Mar 29 17:28:56 2018 +0200
+
+    virt: vbox: Use __get_free_pages instead of kmalloc for DMA32 memory
+
+    It is not possible to get DMA32 zone memory through kmalloc, causing
+    the vboxguest driver to malfunction due to getting memory above
+    4G which the PCI device cannot handle.
+
+    This commit changes the kmalloc calls where the 4G limit matters to
+    using __get_free_pages() fixing vboxguest not working on x86_64 guests
+    with more then 4G RAM.
+
+    Cc: sta...@vger.kernel.org
+    Reported-by: Eloy Coto Pereiro <eloy.c...@gmail.com>
+    Signed-off-by: Hans de Goede <hdego...@redhat.com>
+
+commit 2cb20368ce32e7275a351eadadd4c8f3da742a28
+Author: Hans de Goede <hdego...@redhat.com>
+Date:   Thu Mar 29 17:28:55 2018 +0200
+
+    virt: vbox: Add vbg_req_free() helper function
+
+    This is a preparation patch for fixing issues on x86_64 virtual-machines
+    with more then 4G of RAM, atm we pass __GFP_DMA32 to kmalloc, but kmalloc
+    does not honor that, so we need to switch to get_pages, which means we
+    will not be able to use kfree to free memory allocated with vbg_alloc_req.
+
+    While at it also remove a comment on a vbg_alloc_req call which talks
+    about Windows (inherited from the vbox upstream cross-platform code).
+
+    Cc: sta...@vger.kernel.org
+    Signed-off-by: Hans de Goede <hdego...@redhat.com>
+
+commit fa5c012bc9c3e1ada5cde0bfa3c6706be97b7cb0
+Author: Hans de Goede <hdego...@redhat.com>
+Date:   Thu Mar 29 17:28:54 2018 +0200
+
+    virt: vbox: Move declarations of vboxguest private functions to private 
header
+
+    Move the declarations of functions from vboxguest_utils.c which are only
+    meant for vboxguest internal use from include/linux/vbox_utils.h to
+    drivers/virt/vboxguest/vboxguest_core.h.
+
+    Cc: sta...@vger.kernel.org
+    Signed-off-by: Hans de Goede <hdego...@redhat.com>
+---
+ drivers/virt/vboxguest/vboxguest_core.c  | 70 +++++++++++++-----------
+ drivers/virt/vboxguest/vboxguest_core.h  |  9 +++
+ drivers/virt/vboxguest/vboxguest_linux.c | 19 ++++++-
+ drivers/virt/vboxguest/vboxguest_utils.c | 17 ++++--
+ include/linux/vbox_utils.h               | 23 --------
+ 5 files changed, 76 insertions(+), 62 deletions(-)
+
+diff --git a/drivers/virt/vboxguest/vboxguest_core.c 
b/drivers/virt/vboxguest/vboxguest_core.c
+index 190dbf8cfcb5..2f3856a95856 100644
+--- a/drivers/virt/vboxguest/vboxguest_core.c
++++ b/drivers/virt/vboxguest/vboxguest_core.c
+@@ -114,7 +114,7 @@ static void vbg_guest_mappings_init(struct vbg_dev *gdev)
+       }
+ 
+ out:
+-      kfree(req);
++      vbg_req_free(req, sizeof(*req));
+       kfree(pages);
+ }
+ 
+@@ -144,7 +144,7 @@ static void vbg_guest_mappings_exit(struct vbg_dev *gdev)
+ 
+       rc = vbg_req_perform(gdev, req);
+ 
+-      kfree(req);
++      vbg_req_free(req, sizeof(*req));
+ 
+       if (rc < 0) {
+               vbg_err("%s error: %d\n", __func__, rc);
+@@ -214,8 +214,8 @@ static int vbg_report_guest_info(struct vbg_dev *gdev)
+       ret = vbg_status_code_to_errno(rc);
+ 
+ out_free:
+-      kfree(req2);
+-      kfree(req1);
++      vbg_req_free(req2, sizeof(*req2));
++      vbg_req_free(req1, sizeof(*req1));
+       return ret;
+ }
+ 
+@@ -245,7 +245,7 @@ static int vbg_report_driver_status(struct vbg_dev *gdev, 
bool active)
+       if (rc == VERR_NOT_IMPLEMENTED) /* Compatibility with older hosts. */
+               rc = VINF_SUCCESS;
+ 
+-      kfree(req);
++      vbg_req_free(req, sizeof(*req));
+ 
+       return vbg_status_code_to_errno(rc);
+ }
+@@ -431,58 +431,52 @@ static int vbg_heartbeat_host_config(struct vbg_dev 
*gdev, bool enabled)
+       rc = vbg_req_perform(gdev, req);
+       do_div(req->interval_ns, 1000000); /* ns -> ms */
+       gdev->heartbeat_interval_ms = req->interval_ns;
+-      kfree(req);
++      vbg_req_free(req, sizeof(*req));
+ 
+       return vbg_status_code_to_errno(rc);
+ }
+ 
+ /**
+  * Initializes the heartbeat timer. This feature may be disabled by the host.
+  * Return: 0 or negative errno value.
+  * @gdev:             The Guest extension device.
+  */
+ static int vbg_heartbeat_init(struct vbg_dev *gdev)
+ {
+       int ret;
+ 
+       /* Make sure that heartbeat checking is disabled if we fail. */
+       ret = vbg_heartbeat_host_config(gdev, false);
+       if (ret < 0)
+               return ret;
+ 
+       ret = vbg_heartbeat_host_config(gdev, true);
+       if (ret < 0)
+               return ret;
+ 
+-      /*
+-       * Preallocate the request to use it from the timer callback because:
+-       *    1) on Windows vbg_req_alloc must be called at IRQL <= APC_LEVEL
+-       *       and the timer callback runs at DISPATCH_LEVEL;
+-       *    2) avoid repeated allocations.
+-       */
+       gdev->guest_heartbeat_req = vbg_req_alloc(
+                                       sizeof(*gdev->guest_heartbeat_req),
+                                       VMMDEVREQ_GUEST_HEARTBEAT);
+       if (!gdev->guest_heartbeat_req)
+               return -ENOMEM;
+ 
+       vbg_info("%s: Setting up heartbeat to trigger every %d milliseconds\n",
+                __func__, gdev->heartbeat_interval_ms);
+       mod_timer(&gdev->heartbeat_timer, 0);
+ 
+       return 0;
+ }
+ 
+ /**
+  * Cleanup hearbeat code, stop HB timer and disable host heartbeat checking.
+  * @gdev:             The Guest extension device.
+  */
+ static void vbg_heartbeat_exit(struct vbg_dev *gdev)
+ {
+       del_timer_sync(&gdev->heartbeat_timer);
+       vbg_heartbeat_host_config(gdev, false);
+-      kfree(gdev->guest_heartbeat_req);
+-
++      vbg_req_free(gdev->guest_heartbeat_req,
++                   sizeof(*gdev->guest_heartbeat_req));
+ }
+ 
+ /**
+@@ -543,7 +537,7 @@ static int vbg_reset_host_event_filter(struct vbg_dev 
*gdev,
+       if (rc < 0)
+               vbg_err("%s error, rc: %d\n", __func__, rc);
+ 
+-      kfree(req);
++      vbg_req_free(req, sizeof(*req));
+       return vbg_status_code_to_errno(rc);
+ }
+ 
+@@ -617,32 +611,32 @@ static int vbg_set_session_event_filter(struct vbg_dev 
*gdev,
+ 
+ out:
+       mutex_unlock(&gdev->session_mutex);
+-      kfree(req);
++      vbg_req_free(req, sizeof(*req));
+ 
+       return ret;
+ }
+ 
+ /**
+  * Init and termination worker for set guest capabilities to zero on the host.
+  * Return: 0 or negative errno value.
+  * @gdev:             The Guest extension device.
+  */
+ static int vbg_reset_host_capabilities(struct vbg_dev *gdev)
+ {
+       struct vmmdev_mask *req;
+       int rc;
+ 
+       req = vbg_req_alloc(sizeof(*req), VMMDEVREQ_SET_GUEST_CAPABILITIES);
+       if (!req)
+               return -ENOMEM;
+ 
+       req->not_mask = U32_MAX;
+       req->or_mask = 0;
+       rc = vbg_req_perform(gdev, req);
+       if (rc < 0)
+               vbg_err("%s error, rc: %d\n", __func__, rc);
+ 
+-      kfree(req);
++      vbg_req_free(req, sizeof(*req));
+       return vbg_status_code_to_errno(rc);
+ }
+ 
+@@ -712,44 +706,46 @@ static int vbg_set_session_capabilities(struct vbg_dev 
*gdev,
+ 
+ out:
+       mutex_unlock(&gdev->session_mutex);
+-      kfree(req);
++      vbg_req_free(req, sizeof(*req));
+ 
+       return ret;
+ }
+ 
+ /**
+  * vbg_query_host_version get the host feature mask and version information.
+  * Return: 0 or negative errno value.
+  * @gdev:             The Guest extension device.
+  */
+ static int vbg_query_host_version(struct vbg_dev *gdev)
+ {
+       struct vmmdev_host_version *req;
+       int rc, ret;
+ 
+       req = vbg_req_alloc(sizeof(*req), VMMDEVREQ_GET_HOST_VERSION);
+       if (!req)
+               return -ENOMEM;
+ 
+       rc = vbg_req_perform(gdev, req);
+       ret = vbg_status_code_to_errno(rc);
+-      if (ret)
++      if (ret) {
++              vbg_err("%s error: %d\n", __func__, rc);
+               goto out;
++      }
+ 
+       snprintf(gdev->host_version, sizeof(gdev->host_version), "%u.%u.%ur%u",
+                req->major, req->minor, req->build, req->revision);
+       gdev->host_features = req->features;
+ 
+       vbg_info("vboxguest: host-version: %s %#x\n", gdev->host_version,
+                gdev->host_features);
+ 
+       if (!(req->features & VMMDEV_HVF_HGCM_PHYS_PAGE_LIST)) {
+               vbg_err("vboxguest: Error host too old (does not support 
page-lists)\n");
+               ret = -ENODEV;
+       }
+ 
+ out:
+-      kfree(req);
++      vbg_req_free(req, sizeof(*req));
+       return ret;
+ }
+ 
+@@ -847,36 +843,46 @@ int vbg_core_init(struct vbg_dev *gdev, u32 fixed_events)
+       return 0;
+ 
+ err_free_reqs:
+-      kfree(gdev->mouse_status_req);
+-      kfree(gdev->ack_events_req);
+-      kfree(gdev->cancel_req);
+-      kfree(gdev->mem_balloon.change_req);
+-      kfree(gdev->mem_balloon.get_req);
++      vbg_req_free(gdev->mouse_status_req,
++                   sizeof(*gdev->mouse_status_req));
++      vbg_req_free(gdev->ack_events_req,
++                   sizeof(*gdev->ack_events_req));
++      vbg_req_free(gdev->cancel_req,
++                   sizeof(*gdev->cancel_req));
++      vbg_req_free(gdev->mem_balloon.change_req,
++                   sizeof(*gdev->mem_balloon.change_req));
++      vbg_req_free(gdev->mem_balloon.get_req,
++                   sizeof(*gdev->mem_balloon.get_req));
+       return ret;
+ }
+ 
+ /**
+  * Call this on exit to clean-up vboxguest-core managed resources.
+  *
+  * The native code should call this before the driver is loaded,
+  * but don't call this on shutdown.
+  * @gdev:             The Guest extension device.
+  */
+ void vbg_core_exit(struct vbg_dev *gdev)
+ {
+       vbg_heartbeat_exit(gdev);
+       vbg_guest_mappings_exit(gdev);
+ 
+       /* Clear the host flags (mouse status etc). */
+       vbg_reset_host_event_filter(gdev, 0);
+       vbg_reset_host_capabilities(gdev);
+       vbg_core_set_mouse_status(gdev, 0);
+ 
+-      kfree(gdev->mouse_status_req);
+-      kfree(gdev->ack_events_req);
+-      kfree(gdev->cancel_req);
+-      kfree(gdev->mem_balloon.change_req);
+-      kfree(gdev->mem_balloon.get_req);
++      vbg_req_free(gdev->mouse_status_req,
++                   sizeof(*gdev->mouse_status_req));
++      vbg_req_free(gdev->ack_events_req,
++                   sizeof(*gdev->ack_events_req));
++      vbg_req_free(gdev->cancel_req,
++                   sizeof(*gdev->cancel_req));
++      vbg_req_free(gdev->mem_balloon.change_req,
++                   sizeof(*gdev->mem_balloon.change_req));
++      vbg_req_free(gdev->mem_balloon.get_req,
++                   sizeof(*gdev->mem_balloon.get_req));
+ }
+ 
+ /**
+@@ -1415,7 +1421,7 @@ static int vbg_ioctl_write_core_dump(struct vbg_dev 
*gdev,
+       req->flags = dump->u.in.flags;
+       dump->hdr.rc = vbg_req_perform(gdev, req);
+ 
+-      kfree(req);
++      vbg_req_free(req, sizeof(*req));
+       return 0;
+ }
+ 
+@@ -1513,7 +1519,7 @@ int vbg_core_set_mouse_status(struct vbg_dev *gdev, u32 
features)
+       if (rc < 0)
+               vbg_err("%s error, rc: %d\n", __func__, rc);
+ 
+-      kfree(req);
++      vbg_req_free(req, sizeof(*req));
+       return vbg_status_code_to_errno(rc);
+ }
+ 
+diff --git a/drivers/virt/vboxguest/vboxguest_core.h 
b/drivers/virt/vboxguest/vboxguest_core.h
+index 6c784bf4fa6d..7ad9ec45bfa9 100644
+--- a/drivers/virt/vboxguest/vboxguest_core.h
++++ b/drivers/virt/vboxguest/vboxguest_core.h
+@@ -171,4 +171,13 @@ irqreturn_t vbg_core_isr(int irq, void *dev_id);
+ 
+ void vbg_linux_mouse_event(struct vbg_dev *gdev);
+ 
++/* Private (non exported) functions form vboxguest_utils.c */
++void *vbg_req_alloc(size_t len, enum vmmdev_request_type req_type);
++void vbg_req_free(void *req, size_t len);
++int vbg_req_perform(struct vbg_dev *gdev, void *req);
++int vbg_hgcm_call32(
++      struct vbg_dev *gdev, u32 client_id, u32 function, u32 timeout_ms,
++      struct vmmdev_hgcm_function_parameter32 *parm32, u32 parm_count,
++      int *vbox_status);
++
+ #endif
+diff --git a/drivers/virt/vboxguest/vboxguest_linux.c 
b/drivers/virt/vboxguest/vboxguest_linux.c
+index 82e280d38cc2..398d22693234 100644
+--- a/drivers/virt/vboxguest/vboxguest_linux.c
++++ b/drivers/virt/vboxguest/vboxguest_linux.c
+@@ -87,52 +87,65 @@ static long vbg_misc_device_ioctl(struct file *filp, 
unsigned int req,
+       struct vbg_session *session = filp->private_data;
+       size_t returned_size, size;
+       struct vbg_ioctl_hdr hdr;
++      bool is_vmmdev_req;
+       int ret = 0;
+       void *buf;
+ 
+       if (copy_from_user(&hdr, (void *)arg, sizeof(hdr)))
+               return -EFAULT;
+ 
+       if (hdr.version != VBG_IOCTL_HDR_VERSION)
+               return -EINVAL;
+ 
+       if (hdr.size_in < sizeof(hdr) ||
+           (hdr.size_out && hdr.size_out < sizeof(hdr)))
+               return -EINVAL;
+ 
+       size = max(hdr.size_in, hdr.size_out);
+       if (_IOC_SIZE(req) && _IOC_SIZE(req) != size)
+               return -EINVAL;
+       if (size > SZ_16M)
+               return -E2BIG;
+ 
+-      /* __GFP_DMA32 because IOCTL_VMMDEV_REQUEST passes this to the host */
+-      buf = kmalloc(size, GFP_KERNEL | __GFP_DMA32);
++      /*
++       * IOCTL_VMMDEV_REQUEST needs the buffer to be below 4G to avoid
++       * the need for a bounce-buffer and another copy later on.
++       */
++      is_vmmdev_req = (req & ~IOCSIZE_MASK) == VBG_IOCTL_VMMDEV_REQUEST(0) ||
++                       req == VBG_IOCTL_VMMDEV_REQUEST_BIG;
++
++      if (is_vmmdev_req)
++              buf = vbg_req_alloc(size, VBG_IOCTL_HDR_TYPE_DEFAULT);
++      else
++              buf = kmalloc(size, GFP_KERNEL);
+       if (!buf)
+               return -ENOMEM;
+ 
+       if (copy_from_user(buf, (void *)arg, hdr.size_in)) {
+               ret = -EFAULT;
+               goto out;
+       }
+       if (hdr.size_in < size)
+               memset(buf + hdr.size_in, 0, size -  hdr.size_in);
+ 
+       ret = vbg_core_ioctl(session, req, buf);
+       if (ret)
+               goto out;
+ 
+       returned_size = ((struct vbg_ioctl_hdr *)buf)->size_out;
+       if (returned_size > size) {
+               vbg_debug("%s: too much output data %zu > %zu\n",
+                         __func__, returned_size, size);
+               returned_size = size;
+       }
+       if (copy_to_user((void *)arg, buf, returned_size) != 0)
+               ret = -EFAULT;
+ 
+ out:
+-      kfree(buf);
++      if (is_vmmdev_req)
++              vbg_req_free(buf, size);
++      else
++              kfree(buf);
+ 
+       return ret;
+ }
+diff --git a/drivers/virt/vboxguest/vboxguest_utils.c 
b/drivers/virt/vboxguest/vboxguest_utils.c
+index 0f0dab8023cf..bf4474214b4d 100644
+--- a/drivers/virt/vboxguest/vboxguest_utils.c
++++ b/drivers/virt/vboxguest/vboxguest_utils.c
+@@ -65,23 +65,32 @@ VBG_LOG(vbg_debug, pr_debug);
+ void *vbg_req_alloc(size_t len, enum vmmdev_request_type req_type)
+ {
+       struct vmmdev_request_header *req;
++      int order = get_order(PAGE_ALIGN(len));
+ 
+-      req = kmalloc(len, GFP_KERNEL | __GFP_DMA32);
++      req = (void *)__get_free_pages(GFP_KERNEL | GFP_DMA32, order);
+       if (!req)
+               return NULL;
+ 
+       memset(req, 0xaa, len);
+ 
+       req->size = len;
+       req->version = VMMDEV_REQUEST_HEADER_VERSION;
+       req->request_type = req_type;
+       req->rc = VERR_GENERAL_FAILURE;
+       req->reserved1 = 0;
+       req->reserved2 = 0;
+ 
+       return req;
+ }
+ 
++void vbg_req_free(void *req, size_t len)
++{
++      if (!req)
++              return;
++
++      free_pages((unsigned long)req, get_order(PAGE_ALIGN(len)));
++}
++
+ /* Note this function returns a VBox status code, not a negative errno!! */
+ int vbg_req_perform(struct vbg_dev *gdev, void *req)
+ {
+@@ -137,7 +146,7 @@ int vbg_hgcm_connect(struct vbg_dev *gdev,
+               rc = hgcm_connect->header.result;
+       }
+ 
+-      kfree(hgcm_connect);
++      vbg_req_free(hgcm_connect, sizeof(*hgcm_connect));
+ 
+       *vbox_status = rc;
+       return 0;
+@@ -166,7 +175,7 @@ int vbg_hgcm_disconnect(struct vbg_dev *gdev, u32 
client_id, int *vbox_status)
+       if (rc >= 0)
+               rc = hgcm_disconnect->header.result;
+ 
+-      kfree(hgcm_disconnect);
++      vbg_req_free(hgcm_disconnect, sizeof(*hgcm_disconnect));
+ 
+       *vbox_status = rc;
+       return 0;
+@@ -623,7 +632,7 @@ int vbg_hgcm_call(struct vbg_dev *gdev, u32 client_id, u32 
function,
+       }
+ 
+       if (!leak_it)
+-              kfree(call);
++              vbg_req_free(call, size);
+ 
+ free_bounce_bufs:
+       if (bounce_bufs) {
+diff --git a/include/linux/vbox_utils.h b/include/linux/vbox_utils.h
+index c71def6b310f..a240ed2a0372 100644
+--- a/include/linux/vbox_utils.h
++++ b/include/linux/vbox_utils.h
+@@ -24,39 +24,16 @@ __printf(1, 2) void vbg_debug(const char *fmt, ...);
+ #define vbg_debug pr_debug
+ #endif
+ 
+-/**
+- * Allocate memory for generic request and initialize the request header.
+- *
+- * Return: the allocated memory
+- * @len:              Size of memory block required for the request.
+- * @req_type:         The generic request type.
+- */
+-void *vbg_req_alloc(size_t len, enum vmmdev_request_type req_type);
+-
+-/**
+- * Perform a generic request.
+- *
+- * Return: VBox status code
+- * @gdev:             The Guest extension device.
+- * @req:              Pointer to the request structure.
+- */
+-int vbg_req_perform(struct vbg_dev *gdev, void *req);
+-
+ int vbg_hgcm_connect(struct vbg_dev *gdev,
+                    struct vmmdev_hgcm_service_location *loc,
+                    u32 *client_id, int *vbox_status);
+ 
+ int vbg_hgcm_disconnect(struct vbg_dev *gdev, u32 client_id, int 
*vbox_status);
+ 
+ int vbg_hgcm_call(struct vbg_dev *gdev, u32 client_id, u32 function,
+                 u32 timeout_ms, struct vmmdev_hgcm_function_parameter *parms,
+                 u32 parm_count, int *vbox_status);
+ 
+-int vbg_hgcm_call32(
+-      struct vbg_dev *gdev, u32 client_id, u32 function, u32 timeout_ms,
+-      struct vmmdev_hgcm_function_parameter32 *parm32, u32 parm_count,
+-      int *vbox_status);
+-
+ /**
+  * Convert a VirtualBox status code to a standard Linux kernel return value.
+  * Return: 0 or negative errno value.
+-- 
+2.17.0
+

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2018-04-11 20:26:44 UTC (rev 321595)
+++ PKGBUILD    2018-04-11 20:40:42 UTC (rev 321596)
@@ -5,8 +5,8 @@
 pkgbase=linux               # Build stock -ARCH kernel
 #pkgbase=linux-custom       # Build kernel with a different name
 _srcname=linux-4.16
-pkgver=4.16
-pkgrel=2
+pkgver=4.16.1
+pkgrel=1
 arch=('x86_64')
 url="https://www.kernel.org/";
 license=('GPL2')
@@ -14,7 +14,7 @@
 options=('!strip')
 source=(
   https://www.kernel.org/pub/linux/kernel/v4.x/${_srcname}.tar.{xz,sign}
-  #https://www.kernel.org/pub/linux/kernel/v4.x/patch-${pkgver}.{xz,sign}
+  https://www.kernel.org/pub/linux/kernel/v4.x/patch-${pkgver}.{xz,sign}
   config         # the main kernel config file
   60-linux.hook  # pacman hook for depmod
   90-linux.hook  # pacman hook for initramfs regeneration
@@ -22,6 +22,7 @@
   0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
   0002-drm-i915-edp-Only-use-the-alternate-fixed-mode-if-it.patch
   0003-Partially-revert-swiotlb-remove-various-exports.patch
+  0004-Fix-vboxguest-on-guests-with-more-than-4G-RAM.patch
 )
 validpgpkeys=(
   'ABAF11C65A2970B130ABE3C479BE3E4300411886'  # Linus Torvalds
@@ -29,13 +30,16 @@
 )
 sha256sums=('63f6dc8e3c9f3a0273d5d6f4dca38a2413ca3a5f689329d05b750e4c87bb21b9'
             'SKIP'
-            'd60cb7258ab632ab3ca25071266632970ae0ded00c1f4004fa8c6fc3547225c5'
+            '66931bd802eb8d9f09b1f36bb57f24abab13230469ee855e5aaa2f93be2022e0'
+            'SKIP'
+            'f61e5899ea360e0851d55d238c346f8c97d3344e7a38b437cc446629b1d01a9f'
             'ae2e95db94ef7176207c690224169594d49445e04249d2499e9d2fbc117a0b21'
             '75f99f5239e03238f88d1a834c50043ec32b1dc568f2cc291b07d04718483919'
             'ad6344badc91ad0630caacde83f7f9b97276f80d26a20619a87952be65492c65'
-            '69be34b14df3275118e8c345d61b36b71370710c7b4f61bb3bedaff7501775f0'
-            'a4566321f73fa1448195691349d5ed0ddf30127d17213a31aa2c931e822df061'
-            'd365ce80dab359d5277bd2f8568cad50a30ab269f222ed1bb12b8d74571e24a6')
+            'b172d6cabd8f1980f5ef4b5ad7a96a34e05d99fb02ec0565a80f96719f131a04'
+            '558c2b0fa7ad1761cb1dd89d8b860436f50d515c295949c08de9288100e034f6'
+            'bc8a87cec67ecb8713d96167981c38d7ec4d93e1d2fdcb02193d704c441cff46'
+            'c0fa1a6141bf64111ab9d0af4fc63d95b03b65baa2682aee1cd794d9311062c2')
 
 _kernelname=${pkgbase#linux}
 : ${_kernelname:=-ARCH}
@@ -44,7 +48,7 @@
   cd ${_srcname}
 
   # add upstream patch
-  #patch -p1 -i ../patch-${pkgver}
+  patch -p1 -i ../patch-${pkgver}
 
   # add latest fixes from stable queue, if needed
   # http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git
@@ -58,6 +62,9 @@
   # NVIDIA driver compat
   patch -Np1 -i ../0003-Partially-revert-swiotlb-remove-various-exports.patch
 
+  # https://bugs.archlinux.org/task/58153
+  patch -Np1 -i ../0004-Fix-vboxguest-on-guests-with-more-than-4G-RAM.patch
+
   cat ../config - >.config <<END
 CONFIG_LOCALVERSION="${_kernelname}"
 CONFIG_LOCALVERSION_AUTO=n

Modified: config
===================================================================
--- config      2018-04-11 20:26:44 UTC (rev 321595)
+++ config      2018-04-11 20:40:42 UTC (rev 321596)
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 4.16.0-1 Kernel Configuration
+# Linux/x86 4.16.1-1 Kernel Configuration
 #
 CONFIG_64BIT=y
 CONFIG_X86_64=y

Reply via email to