19
  • Ubuntu version: 16.04

  • VirtualBox version: 5.2.26

  • Updates which have "broken" something: those between last week and today (2019/03/18)

I ran Ubuntu Software Updater this morning, after turning on the computer. Afterwards I tried to launch a Virtual Box machine (version installed via .deb, not the Ubuntu Software Center one) and got that famous error:

Kernel driver not installed (rc=-1908)

The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing

'/sbin/vboxconfig'

as root.

where: suplibOsInit what: 3 VERR_VM_DRIVER_NOT_INSTALLED (-1908) - The support driver is not installed. On linux, open returned ENOENT.

After reading about similar problems and understanding why should I do it, I executed it (same results with 'sudo /usr/lib/virtualbox/vboxdrv.sh setup' and any other solutions to similar problems/posts I've found on this site):

$ sudo /sbin/vboxconfig

vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: failed: Look at /var/log/vbox-setup.log to find out what went wrong.

Reading the .log, I see that the problem seems to be related with the "get_user_pages" function, and at this point I honestly have no idea how to solve it.

Building the main VirtualBox module.
Error building the module:
make V=1 CONFIG_MODULE_SIG= -C /lib/modules/4.4.0-143-generic/build SUBDIRS=/tmp/vbox.0 SRCROOT=/tmp/vbox.0 -j8 modules
make[1]: warning: -jN forced in submake: disabling jobserver mode.
mkdir -p /tmp/vbox.0/.tmp_versions ; rm -f /tmp/vbox.0/.tmp_versions/*
make -f ./scripts/Makefile.build obj=/tmp/vbox.0
[...]
[...]
[...]
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c: In function ‘rtR0MemObjNativeLockUser’:
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:1122:33: warning: passing argument 6 of ‘get_user_pages’ makes pointer from integer without a cast [-Wint-conversion]
                                 fWrite,                 /* force write access. */
                                 ^
In file included from /tmp/vbox.0/r0drv/linux/the-linux-kernel.h:98:0,
                 from /tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:31:
include/linux/mm.h:1222:6: note: expected ‘struct page **’ but argument is of type ‘int’
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:1124:33: warning: passing argument 7 of ‘get_user_pages’ from incompatible pointer type [-Wincompatible-pointer-types]
                                 &pMemLnx->apPages[0],   /* Page array. */
                                 ^
In file included from /tmp/vbox.0/r0drv/linux/the-linux-kernel.h:98:0,
                 from /tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:31:
include/linux/mm.h:1222:6: note: expected ‘struct vm_area_struct **’ but argument is of type ‘struct page **’
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:1112:18: error: too many arguments to function ‘get_user_pages’
             rc = get_user_pages(pTask,                  /* Task for fault accounting. */
                  ^
In file included from /tmp/vbox.0/r0drv/linux/the-linux-kernel.h:98:0,
                 from /tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:31:
include/linux/mm.h:1222:6: note: declared here
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
  gcc -Wp,-MD,/tmp/vbox.0/r0drv/linux/.mpnotification-r0drv-linux.o.d  -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/5/include  -I./arch/x86/include -Iarch/x86/include/generated/uapi -Iarch/x86/include/generated  -Iinclude -I./arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I./include/uapi -Iinclude/generated/uapi -include ./include/linux/kconfig.h -Iubuntu/include  -D__KERNEL__ -fno-pie -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -fno-PIE -fno-pie -no-pie -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_X86_X32_ABI -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -DCONFIG_AS_SHA1_NI=1 -DCONFIG_AS_SHA256_NI=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -DRETPOLINE -fno-delete-null-pointer-checks -Wno-maybe-uninitialized -O2 --param=allow-store-data-races=0 -DCC_HAVE_ASM_GOTO -Wframe-larger-than=1024 -fstack-protector-strong -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-var-tracking-assignments -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fno-merge-all-constants -fmerge-constants -fno-stack-check -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -include /tmp/vbox.0/include/VBox/SUPDrvMangling.h -fno-omit-frame-pointer -fno-pie -I/lib/modules/4.4.0-143-generic/build/include -I/tmp/vbox.0/ -I/tmp/vbox.0/include -I/tmp/vbox.0/r0drv/linux -D__KERNEL__ -DMODULE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -DVBOX_WITH_HARDENING -DSUPDRV_WITH_RELEASE_LOGGER -Wno-declaration-after-statement -DCONFIG_VBOXDRV_AS_MISC -DRT_ARCH_AMD64 -DVBOX_WITH_64_BITS_GUESTS  -DMODULE  -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(mpnotification_r0drv_linux)"  -D"KBUILD_MODNAME=KBUILD_STR(vboxdrv)" -c -o /tmp/vbox.0/r0drv/linux/.tmp_mpnotification-r0drv-linux.o /tmp/vbox.0/r0drv/linux/mpnotification-r0drv-linux.c
scripts/Makefile.build:285: recipe for target '/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.o' failed
make[2]: *** [/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.o] Error 1
make[2]: *** Waiting for unfinished jobs....
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/initterm-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/initterm-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/SUPDrv.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/SUPDrv.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/assert-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/assert-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/alloc-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/alloc-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/mpnotification-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/mpnotification-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/mp-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/mp-r0drv-linux.o"; fi; fi;
Makefile:1454: recipe for target '_module_/tmp/vbox.0' failed
make[1]: *** [_module_/tmp/vbox.0] Error 2
/tmp/vbox.0/Makefile.include.footer:101: recipe for target 'vboxdrv' failed
make: *** [vboxdrv] Error 2

I have already tried every solution for similar issues with this error message but none works for me.

Anyone has had similar problems after last Ubuntu updates?

UPDATE: I have completely uninstalled VirtualBox, restarted the system, installed VirtualBox again, and still the very same error.

  • 2
    Absolutely. What I do not understand is that there are people claiming that previous "version" of the error to be solved for Trusty and Xenial this very March 10th and today we have a "new version" of the problem. – Alberto Martín Mar 18 at 14:28
  • Have you tried VB 6.0? – heynnema Mar 18 at 14:50
  • 1
    I've seen this today after updating a couple of host machines to 4.4.0-143. One had a pretty old version of VirtualBox on it (5.0.x) and the other had 5.2.x (so not quite so old). After the update neither of them would launch my VMs showing the kernel module not installed problem. I upgrade/reverted to 5.1.38 on both, finally getting them to run the VMs. However, when I try to install guest additions on one of the guests, I get the get_user_pages error in the vboxadd-install.log file. – cosimo193 Mar 18 at 16:48
  • I got the same error recently when I attempted to install Virtualbox 5.2.18 and then v6.0, my latop which is a UEFI system with Secure Boot, so there is an added complication, is yours a UEFI system, if it is let me know as I know how to fix this adn can provide a solution. You can confirm your system is UEFI or not by running the command: cd /sys/firmware/efi – user927685 Mar 18 at 23:17
  • If it may be useful for anyone: there's a bug report at bugs.launchpad.net/ubuntu/+source/virtualbox/+bug/1821083 – Ganton Mar 23 at 8:30
13

The easy answer, for now - use the testbuild provided by Vbox while we wait for a kernel patch.

You can find the build here. You will need to use the current links provided on that page because the ones used here in the example have changed.

Make sure you uninstall your current version:

sudo apt remove virtualbox*
dkpk -r virtualbox 
# the tab key will autocomplete the version if there's one for dpkg to remove

Install the test build (change the url to match the latest test build provided by virtualbox using the above link - https://www.virtualbox.org/wiki/Testbuilds):

wget https://www.virtualbox.org/download/testcase/VirtualBox-6.0.5-129423-Linux_amd64.run
chmod +x VirtualBox-6.0.5-129423-Linux_amd64.run
sudo ./VirtualBox-6.0.5-129423-Linux_amd64.run

If you need the extension pack (change the url to match the latest test build provided by virtualbox using the above link - https://www.virtualbox.org/wiki/Testbuilds):

wget https://www.virtualbox.org/download/testcase/Oracle_VM_VirtualBox_Extension_Pack-6.0.5-129380.vbox-extpack
sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-6.0.5-129380.vbox-extpack
  • 1
    Thanks Robco. I haven't had the time to give it a try; I downgraded VirtualBox and in principle I'll just wait until it be fixed or just until next kernel (I really do not need the very last version of VirtualBox). However your solution seems to me the best one for those who need the last/before last version, as far as it be stable. Have you tried it yourself? Is it stable? – Alberto Martín Mar 23 at 17:49
  • Hi Alberto. Yes, I prefer not to downgrade the kernel and I tried downgrading vbox (maybe I didn't go back far enough) but the driver was still unable to be built. I have done this for 4 users and have had no issues. – Robco Mar 25 at 14:03
  • 1
    Thank you for the feedback Robco. Sounds pretty good. In that case I guess this is the most elegant solution to the problem so far. – Alberto Martín Mar 25 at 16:17
  • 1
    You can find the latest test builds on this page: virtualbox.org/wiki/Testbuilds. – Tom Saleeba Apr 15 at 6:18
  • 2
    This has a caveat: "Please also use version 5.2 if you still need support for 32-bit hosts, as this has been discontinued in 6.0" virtualbox.org/wiki/Downloads . 32-bit guests are still supported. – Piskvor Apr 23 at 11:43
4

I have the same problems.

I switched back to previous kernel. See this: http://karlcode.owtelse.com/blog/2017/03/13/reverting-to-a-previous-kernel/

after that reinstall virtual box and it's working again.

Regards Alex

  • Hi Alex. As much as that could probably make the trick, I find it way too messy and sometimes risky than just downgrading the very VirtualBox, which will work perfectly. – Alberto Martín Mar 18 at 13:25
4

This looks very similar to known bug 1818049 named "virtualbox dkms modules fail to build with linux 4.4.0-143.169 [error: too many arguments to function ‘get_user_pages’]".

The real working solution would be the same as for TTY problem - remove latest kernels and install previous good one (4.4.0-138-generic looks best for me - USB 3.0 safely remove will work, getty problem will be absent):

sudo apt-get purge linux-image-generic linux-headers-generic
sudo apt-get purge linux-image-4.4.0-139-generic linux-headers-4.4.0-139-generic \
linux-image-4.4.0-140-generic linux-headers-4.4.0-140-generic \
linux-image-4.4.0-141-generic linux-headers-4.4.0-141-generic \
linux-image-4.4.0-142-generic linux-headers-4.4.0-142-generic \
linux-image-4.4.0-143-generic linux-headers-4.4.0-143-generic

sudo apt-get install amd64-microcode intel-microcode thermald
sudo apt-get autoremove

sudo apt-get install linux-image-4.4.0-138-generic linux-image-extra-4.4.0-138-generic
sudo apt-get install linux-headers-4.4.0-138 linux-headers-4.4.0-138-generic

and reboot afterwards. So we need to wait for normal stable well-tested kernel.

Warning: do not upgrade kernel to 4.4.0-143-generic if you need VirtualBox on guests and hosts. Subscribe to the bug 1818049 and after the confirmation of the fix - install newest kernel back with sudo apt-get install linux-image-generic linux-headers-generic.

3

The easiest fix for Ubuntu 16.04 is to upgrade the kernel to the same version Ubuntu 18.04 uses by running the following command:

sudo apt-get install --install-recommends linux-generic-hwe-16.04

Reboot after running the above command.

If you run dkms, you won't have to reinstall the guest additions after the machine reboots. Else, reinstall the guest additions, and it should work fine now in Ubuntu 16.04

2

Very much like Alberto's

  1. sudo /usr/lib/virtualbox/vboxdrv.sh setup (I get errors, but stops VBox...)
  2. sudo dpkg -l | grep virtualbox (get VBox version.)
  3. sudo apt-get purge virtualbox-5.XYZ virtualbox-qt (XYZ version from step 2)
  4. Installed from Ubuntu Software: it downgraded to 5.1.38

Up and running again!

2

After trying pretty hard to solve it (neither DKMS nor Synaptics seem to be useful as workaround to the problem), I've been unable to do it, so as TEMPORARY solution for those who could be in the same situation, and just in order to be able to keep on working with guest machines, I suggest to downgrade VirtualBox to the version USC offers.

  • Just uninstall current VirtualBox version (I did it via Synaptics, but GDebi would perfectly work too).

  • Install VirtualBox USC offered version (either via USC or Synaptics)

  • Downgrade (uninstall-install) VBoxGuestAdditions module in host machine.

  • In the guest machines, remember to downgrade VBoxGuestAdditions (insert old VBoxGuestAdditions CD and run it).

The problem/error is still there since it doesn't allow to use last VirtualBox version, I hope it helps though, but I would appreciate an ultimate solution in order to be able to install and use .deb version again.

UPDATE: So far it seems that there is not ultimate solution, so in my case* this one keeps on being the simplest one. (* Personally I prefer to downgrade VirtualBox instead of going back to previous Ubuntu kernels).

However, if for any reason someone needs to use/install the very last version of VirtualBox, he could do it following these instructions, also mentioned by other users: https://bugs.launchpad.net/ubuntu/+source/virtualbox/+bug/1818049/comments/27

1

I also saw this problem. I have Ubuntu 16.04 LTS. It updated to 4.4.0-143 kernel. Virtualbox (5.2.14) would not build vboxdrv.ko. Downgrading to kernel 4.4.0-142 (then removing -143) resolved the problem.

protected by Community Apr 12 at 11:00

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.