From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 3EE371382C5 for ; Mon, 14 Dec 2020 10:56:29 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 27402E0922; Mon, 14 Dec 2020 10:56:27 +0000 (UTC) Received: from smtp.gentoo.org (woodpecker.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id EC55AE0922 for ; Mon, 14 Dec 2020 10:56:26 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 601A83410CB for ; Mon, 14 Dec 2020 10:56:25 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 7983F52 for ; Mon, 14 Dec 2020 10:56:23 +0000 (UTC) From: "Lars Wendler" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Lars Wendler" Message-ID: <1607943369.aa4ae7bff0fcd4972c8258a53e979976dd7a7afc.polynomial-c@gentoo> Subject: [gentoo-commits] repo/gentoo:master commit in: app-emulation/virtualbox-modules/, app-emulation/virtualbox-modules/files/ X-VCS-Repository: repo/gentoo X-VCS-Files: app-emulation/virtualbox-modules/files/virtualbox-modules-6.1.16-linux-5.10-r0drv-memobj-fix-r0.patch app-emulation/virtualbox-modules/virtualbox-modules-6.1.16-r1.ebuild X-VCS-Directories: app-emulation/virtualbox-modules/files/ app-emulation/virtualbox-modules/ X-VCS-Committer: polynomial-c X-VCS-Committer-Name: Lars Wendler X-VCS-Revision: aa4ae7bff0fcd4972c8258a53e979976dd7a7afc X-VCS-Branch: master Date: Mon, 14 Dec 2020 10:56:23 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 625e12f8-7a05-4e5e-80e1-c7a13603ef2b X-Archives-Hash: 6f92715ca6c9864157da30517ea7fe3c commit: aa4ae7bff0fcd4972c8258a53e979976dd7a7afc Author: Lars Wendler gentoo org> AuthorDate: Mon Dec 14 10:56:09 2020 +0000 Commit: Lars Wendler gentoo org> CommitDate: Mon Dec 14 10:56:09 2020 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=aa4ae7bf app-emulation/virtualbox-modules: Fixed build with kernel-5.10 Thanks-to: jospezial gmx.de> Reported-by: Helmut Jarausch igpm.rwth-aachen.de> Closes: https://bugs.gentoo.org/751328 Package-Manager: Portage-3.0.12, Repoman-3.0.2 Signed-off-by: Lars Wendler gentoo.org> ...les-6.1.16-linux-5.10-r0drv-memobj-fix-r0.patch | 96 ++++++++++++++++++++++ .../virtualbox-modules-6.1.16-r1.ebuild | 4 + 2 files changed, 100 insertions(+) diff --git a/app-emulation/virtualbox-modules/files/virtualbox-modules-6.1.16-linux-5.10-r0drv-memobj-fix-r0.patch b/app-emulation/virtualbox-modules/files/virtualbox-modules-6.1.16-linux-5.10-r0drv-memobj-fix-r0.patch new file mode 100644 index 00000000000..168d7c24f5a --- /dev/null +++ b/app-emulation/virtualbox-modules/files/virtualbox-modules-6.1.16-linux-5.10-r0drv-memobj-fix-r0.patch @@ -0,0 +1,96 @@ +Index: vboxdrv/r0drv/linux/memobj-r0drv-linux.c +=================================================================== +--- a/vboxdrv/r0drv/linux/memobj-r0drv-linux.c ++++ b/vboxdrv/r0drv/linux/memobj-r0drv-linux.c +@@ -56,9 +56,12 @@ + * Whether we use alloc_vm_area (3.2+) for executable memory. + * This is a must for 5.8+, but we enable it all the way back to 3.2.x for + * better W^R compliance (fExecutable flag). */ +-#if RTLNX_VER_MIN(3,2,0) || defined(DOXYGEN_RUNNING) ++#if RTLNX_VER_RANGE(3,2,0, 5,10,0) || defined(DOXYGEN_RUNNING) + # define IPRT_USE_ALLOC_VM_AREA_FOR_EXEC + #endif ++#if RTLNX_VER_MIN(5,10,0) || defined(DOXYGEN_RUNNING) ++# define IPRT_USE_APPLY_TO_PAGE_RANGE_FOR_EXEC ++#endif + + /* + * 2.6.29+ kernels don't work with remap_pfn_range() anymore because +@@ -502,7 +505,43 @@ + } + + ++#ifdef IPRT_USE_APPLY_TO_PAGE_RANGE_FOR_EXEC + /** ++ * User data passed to the apply_to_page_range() callback. ++ */ ++typedef struct LNXAPPLYPGRANGE ++{ ++ /** Pointer to the memory object. */ ++ PRTR0MEMOBJLNX pMemLnx; ++ /** The page protection flags to apply. */ ++ pgprot_t fPg; ++} LNXAPPLYPGRANGE; ++/** Pointer to the user data. */ ++typedef LNXAPPLYPGRANGE *PLNXAPPLYPGRANGE; ++/** Pointer to the const user data. */ ++typedef const LNXAPPLYPGRANGE *PCLNXAPPLYPGRANGE; ++ ++/** ++ * Callback called in apply_to_page_range(). ++ * ++ * @returns Linux status code. ++ * @param pPte Pointer to the page table entry for the given address. ++ * @param uAddr The address to apply the new protection to. ++ * @param pvUser The opaque user data. ++ */ ++static DECLCALLBACK(int) rtR0MemObjLinuxApplyPageRange(pte_t *pPte, unsigned long uAddr, void *pvUser) ++{ ++ PCLNXAPPLYPGRANGE pArgs = (PCLNXAPPLYPGRANGE)pvUser; ++ PRTR0MEMOBJLNX pMemLnx = pArgs->pMemLnx; ++ uint32_t idxPg = (uAddr - (unsigned long)pMemLnx->Core.pv) >> PAGE_SHIFT; ++ ++ set_pte(pPte, mk_pte(pMemLnx->apPages[idxPg], pArgs->fPg)); ++ return 0; ++} ++#endif ++ ++ ++/** + * Maps the allocation into ring-0. + * + * This will update the RTR0MEMOBJLNX::Core.pv and RTR0MEMOBJ::fMappedToRing0 members. +@@ -584,6 +623,11 @@ + else + # endif + { ++# if defined(IPRT_USE_APPLY_TO_PAGE_RANGE_FOR_EXEC) ++ if (fExecutable) ++ pgprot_val(fPg) |= _PAGE_NX; /* Uses RTR0MemObjProtect to clear NX when memory ready, W^X fashion. */ ++# endif ++ + # ifdef VM_MAP + pMemLnx->Core.pv = vmap(&pMemLnx->apPages[0], pMemLnx->cPages, VM_MAP, fPg); + # else +@@ -1851,6 +1895,21 @@ + preempt_enable(); + return VINF_SUCCESS; + } ++# elif defined(IPRT_USE_APPLY_TO_PAGE_RANGE_FOR_EXEC) ++ PRTR0MEMOBJLNX pMemLnx = (PRTR0MEMOBJLNX)pMem; ++ if ( pMemLnx->fExecutable ++ && pMemLnx->fMappedToRing0) ++ { ++ LNXAPPLYPGRANGE Args; ++ Args.pMemLnx = pMemLnx; ++ Args.fPg = rtR0MemObjLinuxConvertProt(fProt, true /*fKernel*/); ++ int rcLnx = apply_to_page_range(current->active_mm, (unsigned long)pMemLnx->Core.pv + offSub, cbSub, ++ rtR0MemObjLinuxApplyPageRange, (void *)&Args); ++ if (rcLnx) ++ return VERR_NOT_SUPPORTED; ++ ++ return VINF_SUCCESS; ++ } + # endif + + NOREF(pMem); diff --git a/app-emulation/virtualbox-modules/virtualbox-modules-6.1.16-r1.ebuild b/app-emulation/virtualbox-modules/virtualbox-modules-6.1.16-r1.ebuild index 29faf7632fd..28c26bd6c0c 100644 --- a/app-emulation/virtualbox-modules/virtualbox-modules-6.1.16-r1.ebuild +++ b/app-emulation/virtualbox-modules/virtualbox-modules-6.1.16-r1.ebuild @@ -29,6 +29,10 @@ MODULESD_VBOXDRV_ENABLED="yes" MODULESD_VBOXNETADP_ENABLED="no" MODULESD_VBOXNETFLT_ENABLED="no" +PATCHES=( + "${FILESDIR}/${P}-linux-5.10-r0drv-memobj-fix-r0.patch" #751328 +) + pkg_setup() { linux-mod_pkg_setup BUILD_PARAMS="CC=$(tc-getBUILD_CC) KERN_DIR=${KV_DIR} KERN_VER=${KV_FULL} O=${KV_OUT_DIR} V=1 KBUILD_VERBOSE=1"