diff --git a/0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch b/0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch index 37f728d..220ab4e 100644 --- a/0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch +++ b/0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch @@ -1,8 +1,8 @@ -From ed80ff656462322e0bc7813d736800321097e10a Mon Sep 17 00:00:00 2001 -Message-Id: +From 2c2e2c3c7057a347aad9dbfc61fa87e787de33e7 Mon Sep 17 00:00:00 2001 +Message-Id: <2c2e2c3c7057a347aad9dbfc61fa87e787de33e7.1523475032.git.jan.steffens@gmail.com> From: Serge Hallyn 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 diff --git a/0002-drm-i915-edp-Only-use-the-alternate-fixed-mode-if-it.patch b/0002-drm-i915-edp-Only-use-the-alternate-fixed-mode-if-it.patch index bd5bd16..efd35b8 100644 --- a/0002-drm-i915-edp-Only-use-the-alternate-fixed-mode-if-it.patch +++ b/0002-drm-i915-edp-Only-use-the-alternate-fixed-mode-if-it.patch @@ -1,10 +1,10 @@ -From 7f7ff058a768b93f6a8592f3540471a93aef9a27 Mon Sep 17 00:00:00 2001 -Message-Id: <7f7ff058a768b93f6a8592f3540471a93aef9a27.1523024759.git.jan.steffens@gmail.com> -In-Reply-To: -References: +From 2db81464580bf74253236491d255c9b482dca39e Mon Sep 17 00:00:00 2001 +Message-Id: <2db81464580bf74253236491d255c9b482dca39e.1523475032.git.jan.steffens@gmail.com> +In-Reply-To: <2c2e2c3c7057a347aad9dbfc61fa87e787de33e7.1523475032.git.jan.steffens@gmail.com> +References: <2c2e2c3c7057a347aad9dbfc61fa87e787de33e7.1523475032.git.jan.steffens@gmail.com> From: Jim Bride 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 diff --git a/0003-Partially-revert-swiotlb-remove-various-exports.patch b/0003-Partially-revert-swiotlb-remove-various-exports.patch index ed4e028..6da3f92 100644 --- a/0003-Partially-revert-swiotlb-remove-various-exports.patch +++ b/0003-Partially-revert-swiotlb-remove-various-exports.patch @@ -1,10 +1,10 @@ -From b7c4c2b34e729c1f6f617a8e2aa1dec3e28fdf5c Mon Sep 17 00:00:00 2001 -Message-Id: -In-Reply-To: -References: +From 8b658f0ca1bea1ed3b2cbec9648361757a1b1f32 Mon Sep 17 00:00:00 2001 +Message-Id: <8b658f0ca1bea1ed3b2cbec9648361757a1b1f32.1523475032.git.jan.steffens@gmail.com> +In-Reply-To: <2c2e2c3c7057a347aad9dbfc61fa87e787de33e7.1523475032.git.jan.steffens@gmail.com> +References: <2c2e2c3c7057a347aad9dbfc61fa87e787de33e7.1523475032.git.jan.steffens@gmail.com> From: "Jan Alexander Steffens (heftig)" 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. diff --git a/0004-Fix-vboxguest-on-guests-with-more-than-4G-RAM.patch b/0004-Fix-vboxguest-on-guests-with-more-than-4G-RAM.patch new file mode 100644 index 0000000..764af45 --- /dev/null +++ b/0004-Fix-vboxguest-on-guests-with-more-than-4G-RAM.patch @@ -0,0 +1,552 @@ +From 113d4b8b5be49c6186cdd358fee1099c329fc334 Mon Sep 17 00:00:00 2001 +Message-Id: <113d4b8b5be49c6186cdd358fee1099c329fc334.1523475032.git.jan.steffens@gmail.com> +In-Reply-To: <2c2e2c3c7057a347aad9dbfc61fa87e787de33e7.1523475032.git.jan.steffens@gmail.com> +References: <2c2e2c3c7057a347aad9dbfc61fa87e787de33e7.1523475032.git.jan.steffens@gmail.com> +From: "Jan Alexander Steffens (heftig)" +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 +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 + +commit e4111a6c617687f7cb414ddfa8176206910db76e +Author: Hans de Goede +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 + Signed-off-by: Hans de Goede + +commit 2cb20368ce32e7275a351eadadd4c8f3da742a28 +Author: Hans de Goede +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 + +commit fa5c012bc9c3e1ada5cde0bfa3c6706be97b7cb0 +Author: Hans de Goede +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 +--- + 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 + diff --git a/PKGBUILD b/PKGBUILD index 975afd8..aba1ce2 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -4,8 +4,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') @@ -13,7 +13,7 @@ makedepends=('xmlto' 'kmod' 'inetutils' 'bc' 'libelf') 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 @@ -21,6 +21,7 @@ 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 ) validpgpkeys=( 'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linus Torvalds @@ -28,13 +29,16 @@ validpgpkeys=( ) sha256sums=('63f6dc8e3c9f3a0273d5d6f4dca38a2413ca3a5f689329d05b750e4c87bb21b9' 'SKIP' - 'd60cb7258ab632ab3ca25071266632970ae0ded00c1f4004fa8c6fc3547225c5' + '66931bd802eb8d9f09b1f36bb57f24abab13230469ee855e5aaa2f93be2022e0' + 'SKIP' + 'f61e5899ea360e0851d55d238c346f8c97d3344e7a38b437cc446629b1d01a9f' 'ae2e95db94ef7176207c690224169594d49445e04249d2499e9d2fbc117a0b21' '75f99f5239e03238f88d1a834c50043ec32b1dc568f2cc291b07d04718483919' 'ad6344badc91ad0630caacde83f7f9b97276f80d26a20619a87952be65492c65' - '69be34b14df3275118e8c345d61b36b71370710c7b4f61bb3bedaff7501775f0' - 'a4566321f73fa1448195691349d5ed0ddf30127d17213a31aa2c931e822df061' - 'd365ce80dab359d5277bd2f8568cad50a30ab269f222ed1bb12b8d74571e24a6') + 'b172d6cabd8f1980f5ef4b5ad7a96a34e05d99fb02ec0565a80f96719f131a04' + '558c2b0fa7ad1761cb1dd89d8b860436f50d515c295949c08de9288100e034f6' + 'bc8a87cec67ecb8713d96167981c38d7ec4d93e1d2fdcb02193d704c441cff46' + 'c0fa1a6141bf64111ab9d0af4fc63d95b03b65baa2682aee1cd794d9311062c2') _kernelname=${pkgbase#linux} : ${_kernelname:=-ARCH} @@ -43,7 +47,7 @@ prepare() { 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 @@ -57,6 +61,9 @@ prepare() { # 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 <