Ubuntu – Virtual box works no longer, suspect a kernel update caused this

driverskernelvirtualbox

Virtual box fails to boot any VMs, suspect its due to a kernel update

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 virtualbox-dkms package and load the kernel module by executing

modprobe vboxdrv

as root.

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

when you try reinstalling the dkms

sudo apt-get install --reinstall virtualbox-dkms
Building for 5.0.0-23-generic
Building initial module for 5.0.0-23-generic
ERROR: Cannot create report: [Errno 17] File exists: '/var/crash/virtualbox-dkms.0.crash'
Error! Bad return status for module build on kernel: 5.0.0-23-generic (x86_64)
Consult /var/lib/dkms/virtualbox/5.2.18/build/make.log for more information.

Make log is as follows:

DKMS make.log for virtualbox-5.2.18 for kernel 5.0.0-23-generic (x86_64)
Sun Aug  4 08:04:13 IST 2019
make: Entering directory '/usr/src/linux-headers-5.0.0-23-generic'
  CC [M]  /var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/linux/SUPDrv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/SUPDrv.o
  CC [M]  /var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/SUPDrvGip.o
  CC [M]  /var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/SUPDrvSem.o
  CC [M]  /var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/SUPDrvTracer.o
  CC [M]  /var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/SUPLibAll.o
  CC [M]  /var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/r0drv/alloc-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/r0drv/initterm-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/r0drv/memobj-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/r0drv/mpnotification-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/r0drv/powernotification-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/r0drv/linux/assert-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/r0drv/linux/alloc-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/r0drv/linux/initterm-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/r0drv/linux/memobj-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.o
/var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.c: In function ‘VBoxHost_RTR0MemUserIsValidAddr’:
/var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.c:69:55: error: macro "access_ok" passed 3 arguments, but takes just 2
     bool fRc = access_ok(VERIFY_READ, (void *)R3Ptr, 1);
                                                       ^
/var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.c:69:16: error: ‘access_ok’ undeclared (first use in this function)
     bool fRc = access_ok(VERIFY_READ, (void *)R3Ptr, 1);
                ^~~~~~~~~
/var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.c:69:16: note: each undeclared identifier is reported only once for each function it appears in
scripts/Makefile.build:284: recipe for target '/var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.o' failed
make[2]: *** [/var/lib/dkms/virtualbox/5.2.18/build/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.o] Error 1
make[2]: *** Waiting for unfinished jobs....
scripts/Makefile.build:515: recipe for target '/var/lib/dkms/virtualbox/5.2.18/build/vboxdrv' failed
make[1]: *** [/var/lib/dkms/virtualbox/5.2.18/build/vboxdrv] Error 2
Makefile:1606: recipe for target '_module_/var/lib/dkms/virtualbox/5.2.18/build' failed
make: *** [_module_/var/lib/dkms/virtualbox/5.2.18/build] Error 2
make: Leaving directory '/usr/src/linux-headers-5.0.0-23-generic'

If i try

sudo modprobe vboxdrv
modprobe: FATAL: Module vboxdrv not found in directory /lib/modules/5.0.0-23-generic

Any idea how to fix this ?

Best Answer

You need to purge and reinstall VirtualBox.

  1. Back up your virtual machines somewhere safe.

  2. Purge Virtualbox:

    $ sudo apt purge virtualbox*
    
  3. Get rid of old deps and configs:

    $ sudo apt autoremove
    $ sudo apt autoclean
    
  4. Install a shiny new VBox

There are two options for installing VBox. From standard repos (Option 1) or from a PPA (Option 2). Do one or the other NOT both.

Option 1. You can install directly from the standard repos like this:

$ sudo apt install virtualbox

Option 2. Install from the PPA

If you want the absolute latest version of VBox and any potential closed source drivers follow these steps to install from the PPA.

4.2.1. Add the following line to your /etc/apt/sources.list:

deb https://download.virtualbox.org/virtualbox/debian bionic contrib

4.2.2. Download Oracle public key:

$ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
$ wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -

4.2.3. Install VirtualBox:

sudo apt-get update
sudo apt-get install virtualbox

More info on PPA install here.

  1. Enjoy :)
Related Question