mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-28 18:03:04 +00:00
virtualbox: Support UIDGID_STRICT_TYPE_CHECKS.
This adds a patch to support CONFIG_UIDGID_STRICT_TYPE_CHECKS being activated in the kernel config (selected by CONFIG_USER_NS for example). When this kernel option is enabled, current->cred->uid is a structure rather than a simple integer type (uid_t and gid_t), so we need to check for that and also pass the current user namespace where needed. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
This commit is contained in:
parent
f26b5fb730
commit
1029ca5767
@ -54,7 +54,10 @@ in stdenv.mkDerivation {
|
|||||||
++ optional javaBindings jdk
|
++ optional javaBindings jdk
|
||||||
++ optional pythonBindings python;
|
++ optional pythonBindings python;
|
||||||
|
|
||||||
patches = singleton ./missing_files_4.2.8.patch;
|
patches = [
|
||||||
|
./missing_files_4.2.8.patch
|
||||||
|
./strict_types.patch
|
||||||
|
];
|
||||||
|
|
||||||
prePatch = ''
|
prePatch = ''
|
||||||
set -x
|
set -x
|
||||||
|
@ -0,0 +1,68 @@
|
|||||||
|
diff --git a/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c b/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c
|
||||||
|
index 9cc124c..d86da0c 100644
|
||||||
|
--- a/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c
|
||||||
|
+++ b/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c
|
||||||
|
@@ -253,7 +253,11 @@ static struct platform_device gPlatformDevice =
|
||||||
|
DECLINLINE(RTUID) vboxdrvLinuxUid(void)
|
||||||
|
{
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29)
|
||||||
|
+# ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS
|
||||||
|
+ return from_kuid(current_user_ns(), current_uid());
|
||||||
|
+# else
|
||||||
|
return current->cred->uid;
|
||||||
|
+# endif
|
||||||
|
#else
|
||||||
|
return current->uid;
|
||||||
|
#endif
|
||||||
|
@@ -262,7 +266,11 @@ DECLINLINE(RTUID) vboxdrvLinuxUid(void)
|
||||||
|
DECLINLINE(RTGID) vboxdrvLinuxGid(void)
|
||||||
|
{
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29)
|
||||||
|
+# ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS
|
||||||
|
+ return from_kgid(current_user_ns(), current_gid());
|
||||||
|
+# else
|
||||||
|
return current->cred->gid;
|
||||||
|
+# endif
|
||||||
|
#else
|
||||||
|
return current->gid;
|
||||||
|
#endif
|
||||||
|
@@ -271,7 +279,11 @@ DECLINLINE(RTGID) vboxdrvLinuxGid(void)
|
||||||
|
DECLINLINE(RTUID) vboxdrvLinuxEuid(void)
|
||||||
|
{
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29)
|
||||||
|
+# ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS
|
||||||
|
+ return from_kuid(current_user_ns(), current_euid());
|
||||||
|
+# else
|
||||||
|
return current->cred->euid;
|
||||||
|
+# endif
|
||||||
|
#else
|
||||||
|
return current->euid;
|
||||||
|
#endif
|
||||||
|
diff --git a/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c b/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c
|
||||||
|
index 575f739..8909e79 100644
|
||||||
|
--- a/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c
|
||||||
|
+++ b/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c
|
||||||
|
@@ -429,7 +429,11 @@ int vboxPciOsDevDetachHostDriver(PVBOXRAWPCIINS pIns)
|
||||||
|
if (!pNewCreds)
|
||||||
|
goto done;
|
||||||
|
|
||||||
|
+# ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS
|
||||||
|
+ pNewCreds->fsuid = GLOBAL_ROOT_UID;;
|
||||||
|
+# else
|
||||||
|
pNewCreds->fsuid = 0;
|
||||||
|
+# endif
|
||||||
|
pOldCreds = override_creds(pNewCreds);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@@ -539,7 +543,11 @@ int vboxPciOsDevReattachHostDriver(PVBOXRAWPCIINS pIns)
|
||||||
|
if (!pNewCreds)
|
||||||
|
goto done;
|
||||||
|
|
||||||
|
+# ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS
|
||||||
|
+ pNewCreds->fsuid = GLOBAL_ROOT_UID;;
|
||||||
|
+# else
|
||||||
|
pNewCreds->fsuid = 0;
|
||||||
|
+# endif
|
||||||
|
pOldCreds = override_creds(pNewCreds);
|
||||||
|
#endif
|
||||||
|
RTStrPrintf(szFileBuf, cMaxBuf,
|
Loading…
Reference in New Issue
Block a user