forked from AUR/linux-vfio
Update to 4.16.8-1
This commit is contained in:
parent
c2e6ce24ae
commit
e1749cfe73
18
.SRCINFO
18
.SRCINFO
@ -1,5 +1,5 @@
|
||||
pkgbase = linux-vfio
|
||||
pkgver = 4.16.5
|
||||
pkgver = 4.16.8
|
||||
pkgrel = 1
|
||||
url = https://www.kernel.org/
|
||||
arch = x86_64
|
||||
@ -12,8 +12,8 @@ pkgbase = linux-vfio
|
||||
options = !strip
|
||||
source = https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.16.tar.xz
|
||||
source = https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.16.tar.sign
|
||||
source = https://www.kernel.org/pub/linux/kernel/v4.x/patch-4.16.5.xz
|
||||
source = https://www.kernel.org/pub/linux/kernel/v4.x/patch-4.16.5.sign
|
||||
source = https://www.kernel.org/pub/linux/kernel/v4.x/patch-4.16.8.xz
|
||||
source = https://www.kernel.org/pub/linux/kernel/v4.x/patch-4.16.8.sign
|
||||
source = config
|
||||
source = 60-linux.hook
|
||||
source = 90-linux.hook
|
||||
@ -21,23 +21,21 @@ pkgbase = linux-vfio
|
||||
source = 0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
|
||||
source = 0002-drm-i915-edp-Only-use-the-alternate-fixed-mode-if-it.patch
|
||||
source = 0003-Partially-revert-swiotlb-remove-various-exports.patch
|
||||
source = 0004-Fix-vboxguest-on-guests-with-more-than-4G-RAM.patch
|
||||
source = add-acs-overrides.patch
|
||||
source = i915-vga-arbiter.patch
|
||||
validpgpkeys = ABAF11C65A2970B130ABE3C479BE3E4300411886
|
||||
validpgpkeys = 647F28654894E3BD457199BE38DBBDC86092693E
|
||||
sha256sums = 63f6dc8e3c9f3a0273d5d6f4dca38a2413ca3a5f689329d05b750e4c87bb21b9
|
||||
sha256sums = SKIP
|
||||
sha256sums = 8c3bb050d11da6e91d3e169f76ee3ed6937e1ca64264e605ddba8108696ba011
|
||||
sha256sums = 6fb2db1e38f762e6a028dfa5e6d094f0eb4324572667923aca3d64c87117772d
|
||||
sha256sums = SKIP
|
||||
sha256sums = 51f794dee6098b19b5f8ec2277f52a313584f2ff8b3abf111f2fd92a6ea118dd
|
||||
sha256sums = 8566a49997faf3f8678440c52578a7a0ee901e598d3b67d3bee3799fb92e8f86
|
||||
sha256sums = ae2e95db94ef7176207c690224169594d49445e04249d2499e9d2fbc117a0b21
|
||||
sha256sums = 75f99f5239e03238f88d1a834c50043ec32b1dc568f2cc291b07d04718483919
|
||||
sha256sums = ad6344badc91ad0630caacde83f7f9b97276f80d26a20619a87952be65492c65
|
||||
sha256sums = a6119b46856ed2652c509fed380052e6df2be89c69a0d748cf7d8745bf35b871
|
||||
sha256sums = 545566a7358d711b8d4f9924df685e2410549e20d99e5d1c0dfaccdfeafda60d
|
||||
sha256sums = bef6dd7b3a749ec072614ea4ed0bd5ea1d90519731f3438e4938d5b957032cc5
|
||||
sha256sums = d647211e288436bcc010019a69f4ebf9a94c33b423c650aea8098969208ec836
|
||||
sha256sums = 7fb607fe384dd814e9e45d7fc28f7b5b23a51d80784c54bf9209486ad428be14
|
||||
sha256sums = ceaa19e0af3842c62eb666a4ac5c79d89b3e6d00593442f18d6508ca6d74bbaa
|
||||
sha256sums = 5b397cf9eccdad0c1f2865842c29ba6f4e32ad7dbe4e0c6ef6ca6f07d2963cea
|
||||
sha256sums = abe269c6596b54a412bd8415472153f419026d4f367fa3ee1ebc8693ac66915d
|
||||
sha256sums = fe3d47fe6f54d4a82c869fd29484d3f097b5906ef4d456409961a8dd647daad0
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
From ff9d06de19e83c0c5a00a4d46376b4d1032c4f99 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <ff9d06de19e83c0c5a00a4d46376b4d1032c4f99.1524129246.git.jan.steffens@gmail.com>
|
||||
From dea1110505c920b0f7e0cdd8840448e48ef420fa Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <dea1110505c920b0f7e0cdd8840448e48ef420fa.1525295228.git.jan.steffens@gmail.com>
|
||||
From: Serge Hallyn <serge.hallyn@canonical.com>
|
||||
Date: Fri, 31 May 2013 19:12:12 +0100
|
||||
Subject: [PATCH 1/6] add sysctl to disallow unprivileged CLONE_NEWUSER by
|
||||
Subject: [PATCH 1/3] add sysctl to disallow unprivileged CLONE_NEWUSER by
|
||||
default
|
||||
|
||||
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
|
||||
|
@ -1,10 +1,10 @@
|
||||
From 3dcbf4dd14d295c3a238d73e9f791a827b906058 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <3dcbf4dd14d295c3a238d73e9f791a827b906058.1524129246.git.jan.steffens@gmail.com>
|
||||
In-Reply-To: <ff9d06de19e83c0c5a00a4d46376b4d1032c4f99.1524129246.git.jan.steffens@gmail.com>
|
||||
References: <ff9d06de19e83c0c5a00a4d46376b4d1032c4f99.1524129246.git.jan.steffens@gmail.com>
|
||||
From 800a7732e3d89f3dac3b10ca6b82868286562331 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <800a7732e3d89f3dac3b10ca6b82868286562331.1525295228.git.jan.steffens@gmail.com>
|
||||
In-Reply-To: <dea1110505c920b0f7e0cdd8840448e48ef420fa.1525295228.git.jan.steffens@gmail.com>
|
||||
References: <dea1110505c920b0f7e0cdd8840448e48ef420fa.1525295228.git.jan.steffens@gmail.com>
|
||||
From: Jim Bride <jim.bride@linux.intel.com>
|
||||
Date: Mon, 6 Nov 2017 13:38:57 -0800
|
||||
Subject: [PATCH 2/6] drm/i915/edp: Only use the alternate fixed mode if it's
|
||||
Subject: [PATCH 2/3] 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
|
||||
|
@ -1,10 +1,10 @@
|
||||
From 1b03bcc6faecde170f9bea83accdde7bbd36df96 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <1b03bcc6faecde170f9bea83accdde7bbd36df96.1524129246.git.jan.steffens@gmail.com>
|
||||
In-Reply-To: <ff9d06de19e83c0c5a00a4d46376b4d1032c4f99.1524129246.git.jan.steffens@gmail.com>
|
||||
References: <ff9d06de19e83c0c5a00a4d46376b4d1032c4f99.1524129246.git.jan.steffens@gmail.com>
|
||||
From d39f4cf63fe216321bf105e3062cef3ad5250cd3 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <d39f4cf63fe216321bf105e3062cef3ad5250cd3.1525295228.git.jan.steffens@gmail.com>
|
||||
In-Reply-To: <dea1110505c920b0f7e0cdd8840448e48ef420fa.1525295228.git.jan.steffens@gmail.com>
|
||||
References: <dea1110505c920b0f7e0cdd8840448e48ef420fa.1525295228.git.jan.steffens@gmail.com>
|
||||
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
|
||||
Date: Fri, 6 Apr 2018 16:19:38 +0200
|
||||
Subject: [PATCH 3/6] Partially revert "swiotlb: remove various exports"
|
||||
Subject: [PATCH 3/3] Partially revert "swiotlb: remove various exports"
|
||||
|
||||
This partially reverts commit 4bd89ed39b2ab8dc4ac4b6c59b07d420b0213bec.
|
||||
The proprietary NVIDIA driver needs one of the exports.
|
||||
@ -13,7 +13,7 @@ The proprietary NVIDIA driver needs one of the exports.
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/lib/swiotlb.c b/lib/swiotlb.c
|
||||
index c43ec2271469..77d699f14af7 100644
|
||||
index 44f7eb408fdb..0bb1bb65ad6b 100644
|
||||
--- a/lib/swiotlb.c
|
||||
+++ b/lib/swiotlb.c
|
||||
@@ -1016,6 +1016,7 @@ swiotlb_map_sg_attrs(struct device *hwdev, struct scatterlist *sgl, int nelems,
|
||||
|
@ -1,552 +0,0 @@
|
||||
From b04d533fa7e16e58243296b5063a624e91d2048e Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b04d533fa7e16e58243296b5063a624e91d2048e.1524129246.git.jan.steffens@gmail.com>
|
||||
In-Reply-To: <ff9d06de19e83c0c5a00a4d46376b4d1032c4f99.1524129246.git.jan.steffens@gmail.com>
|
||||
References: <ff9d06de19e83c0c5a00a4d46376b4d1032c4f99.1524129246.git.jan.steffens@gmail.com>
|
||||
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
|
||||
Date: Wed, 11 Apr 2018 21:27:44 +0200
|
||||
Subject: [PATCH 4/6] Fix vboxguest on guests with more than 4G RAM
|
||||
|
||||
Squashed commit of the following:
|
||||
|
||||
commit 042b191f6b98165d6bcca3ae09a0f9b289d6155e
|
||||
Author: Hans de Goede <hdegoede@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 <hdegoede@redhat.com>
|
||||
|
||||
commit e4111a6c617687f7cb414ddfa8176206910db76e
|
||||
Author: Hans de Goede <hdegoede@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: stable@vger.kernel.org
|
||||
Reported-by: Eloy Coto Pereiro <eloy.coto@gmail.com>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
|
||||
commit 2cb20368ce32e7275a351eadadd4c8f3da742a28
|
||||
Author: Hans de Goede <hdegoede@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: stable@vger.kernel.org
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
|
||||
commit fa5c012bc9c3e1ada5cde0bfa3c6706be97b7cb0
|
||||
Author: Hans de Goede <hdegoede@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: stable@vger.kernel.org
|
||||
Signed-off-by: Hans de Goede <hdegoede@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
|
||||
|
14
PKGBUILD
14
PKGBUILD
@ -3,7 +3,7 @@
|
||||
|
||||
pkgbase=linux-vfio
|
||||
_srcname=linux-4.16
|
||||
pkgver=4.16.5
|
||||
pkgver=4.16.8
|
||||
pkgrel=1
|
||||
arch=('x86_64')
|
||||
url="https://www.kernel.org/"
|
||||
@ -20,7 +20,6 @@ source=(
|
||||
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
|
||||
# patches for pci passthrough
|
||||
add-acs-overrides.patch
|
||||
i915-vga-arbiter.patch
|
||||
@ -31,16 +30,15 @@ validpgpkeys=(
|
||||
)
|
||||
sha256sums=('63f6dc8e3c9f3a0273d5d6f4dca38a2413ca3a5f689329d05b750e4c87bb21b9'
|
||||
'SKIP'
|
||||
'8c3bb050d11da6e91d3e169f76ee3ed6937e1ca64264e605ddba8108696ba011'
|
||||
'6fb2db1e38f762e6a028dfa5e6d094f0eb4324572667923aca3d64c87117772d'
|
||||
'SKIP'
|
||||
'51f794dee6098b19b5f8ec2277f52a313584f2ff8b3abf111f2fd92a6ea118dd'
|
||||
'8566a49997faf3f8678440c52578a7a0ee901e598d3b67d3bee3799fb92e8f86'
|
||||
'ae2e95db94ef7176207c690224169594d49445e04249d2499e9d2fbc117a0b21'
|
||||
'75f99f5239e03238f88d1a834c50043ec32b1dc568f2cc291b07d04718483919'
|
||||
'ad6344badc91ad0630caacde83f7f9b97276f80d26a20619a87952be65492c65'
|
||||
'a6119b46856ed2652c509fed380052e6df2be89c69a0d748cf7d8745bf35b871'
|
||||
'545566a7358d711b8d4f9924df685e2410549e20d99e5d1c0dfaccdfeafda60d'
|
||||
'bef6dd7b3a749ec072614ea4ed0bd5ea1d90519731f3438e4938d5b957032cc5'
|
||||
'd647211e288436bcc010019a69f4ebf9a94c33b423c650aea8098969208ec836'
|
||||
'7fb607fe384dd814e9e45d7fc28f7b5b23a51d80784c54bf9209486ad428be14'
|
||||
'ceaa19e0af3842c62eb666a4ac5c79d89b3e6d00593442f18d6508ca6d74bbaa'
|
||||
'5b397cf9eccdad0c1f2865842c29ba6f4e32ad7dbe4e0c6ef6ca6f07d2963cea'
|
||||
'abe269c6596b54a412bd8415472153f419026d4f367fa3ee1ebc8693ac66915d'
|
||||
'fe3d47fe6f54d4a82c869fd29484d3f097b5906ef4d456409961a8dd647daad0')
|
||||
|
||||
|
6
config
6
config
@ -1,6 +1,6 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/x86 4.16.2-1 Kernel Configuration
|
||||
# Linux/x86 4.16.7-1 Kernel Configuration
|
||||
#
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_X86_64=y
|
||||
@ -571,7 +571,7 @@ CONFIG_AMD_NUMA=y
|
||||
CONFIG_X86_64_ACPI_NUMA=y
|
||||
CONFIG_NODES_SPAN_OTHER_NODES=y
|
||||
# CONFIG_NUMA_EMU is not set
|
||||
CONFIG_NODES_SHIFT=2
|
||||
CONFIG_NODES_SHIFT=5
|
||||
CONFIG_ARCH_SPARSEMEM_ENABLE=y
|
||||
CONFIG_ARCH_SPARSEMEM_DEFAULT=y
|
||||
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
|
||||
@ -661,7 +661,7 @@ CONFIG_ARCH_USES_PG_UNCACHED=y
|
||||
CONFIG_ARCH_RANDOM=y
|
||||
CONFIG_X86_SMAP=y
|
||||
CONFIG_X86_INTEL_UMIP=y
|
||||
CONFIG_X86_INTEL_MPX=y
|
||||
# CONFIG_X86_INTEL_MPX is not set
|
||||
CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y
|
||||
CONFIG_EFI=y
|
||||
CONFIG_EFI_STUB=y
|
||||
|
Loading…
Reference in New Issue
Block a user