VMware Workstation 9 on Fedora 17 Causes Kernel Error with Message “EIP is at HostIF_SafeRDMSR+0×11/0×20 [vmmon]“

I recently updated my VMware Workstation from version 8 to version 9. The install went well and the compile of the modules didn’t fail either. But as soon as I would try to power on a VM, I would get this message:

[code]
Aug 23 10:32:27 klaptop kernel: [ 92.964074] general protection fault: 0000 [#1] SMP
Aug 23 10:32:27 klaptop kernel: [ 92.965006] Modules linked in: vmnet(O) ppdev parport_pc parport fuse vsock(O) vmci(O) vmmon(O) nf_conntrack_ipv4 nf_defrag_ipv4 xt_state nf_conntrack binfmt_misc snd_hda_codec_hdmi snd_hda_codec_idt snd_hda_intel arc4 snd_hda_codec coretemp uvcvideo videobuf2_vmalloc videobuf2_memops videobuf2_core iwlwifi snd_hwdep kvm_intel snd_pcm videodev udlfb kvm media snd_page_alloc mac80211 snd_timer snd cfg80211 i2c_i801 e1000e lpc_ich mfd_core microcode mei rfkill dell_wmi sparse_keymap dell_laptop dcdbas soundcore nfsd nfs_acl auth_rpcgss lockd sunrpc uinput sdhci_pci sdhci mmc_core firewire_ohci firewire_core crc_itu_t ata_generic pata_acpi wmi i915 video i2c_algo_bit drm_kms_helper drm i2c_core [last unloaded: scsi_wait_scan]
Aug 23 10:32:27 klaptop kernel: [ 92.965006]
Aug 23 10:32:27 klaptop kernel: [ 92.965006] Pid: 2761, comm: vmware-vmx Tainted: G O 3.5.2-1.fc17.i686.PAE #1 Dell Inc. Latitude E4300 /0D201R
Aug 23 10:32:27 klaptop kernel: [ 92.965006] EIP: 0060:[] EFLAGS: 00213246 CPU: 0
Aug 23 10:32:27 klaptop kernel: [ 92.965006] EIP is at HostIF_SafeRDMSR+0x11/0x20 [vmmon]
Aug 23 10:32:27 klaptop kernel: [ 92.965006] EAX: 00000000 EBX: 00000001 ECX: 0000048c EDX: 00000000
Aug 23 10:32:27 klaptop kernel: [ 92.965006] ESI: f0278450 EDI: f0278440 EBP: eed45c6c ESP: eed45c68
Aug 23 10:32:27 klaptop kernel: [ 92.965006] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
Aug 23 10:32:27 klaptop kernel: [ 92.965006] CR0: 80050033 CR2: 086ca9b0 CR3: 3679a000 CR4: 000407f0
Aug 23 10:32:27 klaptop kernel: [ 92.965006] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
Aug 23 10:32:27 klaptop kernel: [ 92.965006] DR6: ffff0ff0 DR7: 00000400
Aug 23 10:32:27 klaptop kernel: [ 92.965006] Process vmware-vmx (pid: 2761, ti=eed44000 task=ef4d25b0 task.ti=eed44000)
Aug 23 10:32:27 klaptop kernel: [ 92.965006] Stack:
Aug 23 10:32:27 klaptop kernel: [ 92.965006] 00000000 eed45c8c f91f45ce f91f2608 f0278440 0000048c f91f4560 eed45ca4
Aug 23 10:32:27 klaptop kernel: [ 92.965006] 09f92468 eed45c9c f91f3529 f0278440 f0278440 eed45cb0 f91f6375 00000001
Aug 23 10:32:27 klaptop kernel: [ 92.965006] f0278440 ffffffea eed45f14 f91f107f f2a4ca80 f39c1d10 f5651640 f7004600
Aug 23 10:32:27 klaptop kernel: [ 92.965006] Call Trace:
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] Vmx86GetMSR+0x6e/0xc0 [vmmon]
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? HostIF_AllocKernelMem+0x18/0x50 [vmmon]
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? Vmx86GetUnavailPerfCtrsOnCPU+0x1b0/0x1b0 [vmmon]
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] HostIF_CallOnEachCPU+0x19/0x40 [vmmon]
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] Vmx86_GetAllMSRs+0x25/0x50 [vmmon]
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] LinuxDriver_Ioctl+0x32f/0xd00 [vmmon]
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? __mem_cgroup_commit_charge+0x144/0x2b0
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? radix_tree_lookup_slot+0xd/0x10
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? find_get_page+0x1e/0xe0
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? find_lock_page+0x35/0x90
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? shmem_getpage_gfp+0x8d/0x6f0
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? kmap_atomic_prot+0xfe/0x160
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? unlock_page+0x4e/0x70
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? shmem_write_end+0x56/0xe0
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? iov_iter_copy_from_user_atomic+0x55/0x80
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? shmem_write_begin+0x40/0x50
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? generic_file_buffered_write+0x17d/0x220
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? radix_tree_lookup_slot+0xd/0x10
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? find_get_page+0x1e/0xe0
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? filemap_fault+0xef/0x3b0
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? mem_cgroup_update_page_stat+0x1a/0x50
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? unlock_page+0x4e/0x70
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? __do_fault+0x420/0x5a0
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? __lock_page_or_retry+0xa0/0xa0
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? handle_pte_fault+0x90/0xb00
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? handle_mm_fault+0x1dd/0x280
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? LinuxDriver_Ioctl+0xd00/0xd00 [vmmon]
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] LinuxDriver_UnlockedIoctl+0x19/0x20 [vmmon]
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] do_vfs_ioctl+0x7a/0x580
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? vmalloc_fault+0x181/0x181
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? do_page_fault+0x1b7/0x450
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? vfs_write+0xe8/0x160
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? wait_on_retry_sync_kiocb+0x50/0x50
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] sys_ioctl+0x68/0x80
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] sysenter_do_call+0x12/0x28
Aug 23 10:32:27 klaptop kernel: [ 92.965006] [] ? __schedule+0x730/0x770
Aug 23 10:32:27 klaptop kernel: [ 92.965006] Code: 77 ef 89 d8 e8 51 8c 34 c7 90 eb a5 8b 43 08 e8 d6 d4 24 c7 eb d3 8d 74 26 00 55 89 e5 56 66 66 66 66 90 89 c1 31 c0 89 d6 89 c2 32 31 c9 89 06 89 c8 89 56 04 5e 5d c3 90 55 89 e5 57 56 53
Aug 23 10:32:27 klaptop kernel: [ 92.965006] EIP: [] HostIF_SafeRDMSR+0x11/0x20 [vmmon] SS:ESP 0068:eed45c68
Aug 23 10:32:27 klaptop kernel: [ 93.259084] ---[ end trace 41e66149eea61e4b ]---
[/code]

Here are the version of my OS and Workstation:

[code]

[elatov@klaptop ~]$ uname -a
Linux klaptop.vmware.com 3.5.2-3.fc17.i686.PAE #1 SMP Tue Aug 21 19:27:17 UTC 2012 i686 i686 i386 GNU/Linux

[elatov@klaptop ~]$ lsb_release -a
LSB Version: :core-4.1-ia32:core-4.1-noarch:cxx-4.1-ia32:cxx-4.1-noarch:desktop-4.1-ia32:desktop-4.1-noarch:languages-4.1-ia32:languages-4.1-noarch:printing-4.1-ia32:printing-4.1-noarch
Distributor ID: Fedora
Description: Fedora release 17 (Beefy Miracle)
Release: 17
Codename: Beefy Miracle

[elatov@klaptop ~]$ vmware-installer -l
Product Name Product Version
==================== ====================
vmware-workstation 9.0.0.812388
[/code]

While searching on the internet, I ran into VMware Community Thread 400616, from that thread:

I have figured out one of reasons.
If you crash Linux kernel (3.5 or later) with a HostIF_SafeRDMSR call, this is caused by exception table format. Linux 3.5 (more specifically, Linux kernel commit 706276543b699d80f546e45f8b12574e7b18d952) have changed the format of exception table.

VMware’s vmmon.ko (vmware-vmx/lib/modules/source/vmmon-only/linux/hostif.c) generates exception table using the way described in kernel documentation ($KERNEL/Documentation/x86/exception-tables.txt) but this is quite old and completely useless beginning with Linux kernel 3.5.

Fortunately, there is _ASM_EXTABLE macro (in $KERNEL/arch/x86/include/asm/asm.h) to generate portable exception table. So I have created a patch to make exception table portable and make vmmon.ko to support Linux 3.5. I hope this will help.

From that thread I found VMware Community 2103048. That had a link to the patch for this issue. I downloaded the patch:

[code]
[elatov@klaptop downloads]$ ls *patch*
vmware9_kernel35_patch.tar.bz2
[/code]

I then extracted the patch:

[code]
[elatov@klaptop downloads]$ tar xjfv vmware9_kernel35_patch.tar.bz2
vmware9_kernel3.5_patch/
vmware9_kernel3.5_patch/patch-modules_3.5.0.sh
vmware9_kernel3.5_patch/vmware3.5.patch
[/code]

I then went inside the patch directory and applied the patch:

[code]
[elatov@klaptop downloads]$ cd vmware9_kernel3.5_patch/
[elatov@klaptop vmware9_kernel3.5_patch]$ sudo ./patch-modules_3.5.0.sh
patching file vmmon-only/linux/hostif.c
Stopping vmware (via systemctl):
Using 2.6.x kernel build system.
make: Entering directory `/tmp/modconfig-j0gI7d/vmmon-only'
/usr/bin/make -C /lib/modules/3.5.2-3.fc17.i686.PAE/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= modules
make[1]: Entering directory `/usr/src/kernels/3.5.2-3.fc17.i686.PAE'
CC [M] /tmp/modconfig-j0gI7d/vmmon-only/linux/driver.o
CC [M] /tmp/modconfig-j0gI7d/vmmon-only/linux/hostif.o
CC [M] /tmp/modconfig-j0gI7d/vmmon-only/linux/driverLog.o
CC [M] /tmp/modconfig-j0gI7d/vmmon-only/common/memtrack.o
CC [M] /tmp/modconfig-j0gI7d/vmmon-only/common/apic.o
CC [M] /tmp/modconfig-j0gI7d/vmmon-only/common/hashFunc.o
CC [M] /tmp/modconfig-j0gI7d/vmmon-only/common/vmx86.o
CC [M] /tmp/modconfig-j0gI7d/vmmon-only/common/cpuid.o
CC [M] /tmp/modconfig-j0gI7d/vmmon-only/common/task.o
CC [M] /tmp/modconfig-j0gI7d/vmmon-only/common/comport.o
CC [M] /tmp/modconfig-j0gI7d/vmmon-only/common/phystrack.o
CC [M] /tmp/modconfig-j0gI7d/vmmon-only/vmcore/moduleloop.o
LD [M] /tmp/modconfig-j0gI7d/vmmon-only/vmmon.o
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/modconfig-j0gI7d/vmmon-only/vmmon.mod.o
LD [M] /tmp/modconfig-j0gI7d/vmmon-only/vmmon.ko
make[1]: Leaving directory `/usr/src/kernels/3.5.2-3.fc17.i686.PAE'
/usr/bin/make -C $PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= postbuild
make[1]: Entering directory `/tmp/modconfig-j0gI7d/vmmon-only'
make[1]: `postbuild' is up to date.
make[1]: Leaving directory `/tmp/modconfig-j0gI7d/vmmon-only'
cp -f vmmon.ko ./../vmmon.o
make: Leaving directory `/tmp/modconfig-j0gI7d/vmmon-only'
Using 2.6.x kernel build system.
make: Entering directory `/tmp/modconfig-j0gI7d/vmnet-only'
/usr/bin/make -C /lib/modules/3.5.2-3.fc17.i686.PAE/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= modules
make[1]: Entering directory `/usr/src/kernels/3.5.2-3.fc17.i686.PAE'
CC [M] /tmp/modconfig-j0gI7d/vmnet-only/hub.o
CC [M] /tmp/modconfig-j0gI7d/vmnet-only/driver.o
CC [M] /tmp/modconfig-j0gI7d/vmnet-only/userif.o
CC [M] /tmp/modconfig-j0gI7d/vmnet-only/netif.o
CC [M] /tmp/modconfig-j0gI7d/vmnet-only/bridge.o
CC [M] /tmp/modconfig-j0gI7d/vmnet-only/filter.o
CC [M] /tmp/modconfig-j0gI7d/vmnet-only/procfs.o
CC [M] /tmp/modconfig-j0gI7d/vmnet-only/smac_compat.o
CC [M] /tmp/modconfig-j0gI7d/vmnet-only/smac.o
CC [M] /tmp/modconfig-j0gI7d/vmnet-only/vnetEvent.o
CC [M] /tmp/modconfig-j0gI7d/vmnet-only/vnetUserListener.o
LD [M] /tmp/modconfig-j0gI7d/vmnet-only/vmnet.o
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/modconfig-j0gI7d/vmnet-only/vmnet.mod.o
LD [M] /tmp/modconfig-j0gI7d/vmnet-only/vmnet.ko
make[1]: Leaving directory `/usr/src/kernels/3.5.2-3.fc17.i686.PAE'
/usr/bin/make -C $PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= postbuild
make[1]: Entering directory `/tmp/modconfig-j0gI7d/vmnet-only'
make[1]: `postbuild' is up to date.
make[1]: Leaving directory `/tmp/modconfig-j0gI7d/vmnet-only'
cp -f vmnet.ko ./../vmnet.o
make: Leaving directory `/tmp/modconfig-j0gI7d/vmnet-only'
Using 2.6.x kernel build system.
make: Entering directory `/tmp/modconfig-j0gI7d/vmblock-only'
/usr/bin/make -C /lib/modules/3.5.2-3.fc17.i686.PAE/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= modules
make[1]: Entering directory `/usr/src/kernels/3.5.2-3.fc17.i686.PAE'
CC [M] /tmp/modconfig-j0gI7d/vmblock-only/linux/filesystem.o
CC [M] /tmp/modconfig-j0gI7d/vmblock-only/linux/stubs.o
CC [M] /tmp/modconfig-j0gI7d/vmblock-only/linux/file.o
CC [M] /tmp/modconfig-j0gI7d/vmblock-only/linux/block.o
CC [M] /tmp/modconfig-j0gI7d/vmblock-only/linux/super.o
CC [M] /tmp/modconfig-j0gI7d/vmblock-only/linux/module.o
CC [M] /tmp/modconfig-j0gI7d/vmblock-only/linux/control.o
CC [M] /tmp/modconfig-j0gI7d/vmblock-only/linux/inode.o
CC [M] /tmp/modconfig-j0gI7d/vmblock-only/linux/dentry.o
LD [M] /tmp/modconfig-j0gI7d/vmblock-only/vmblock.o
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/modconfig-j0gI7d/vmblock-only/vmblock.mod.o
LD [M] /tmp/modconfig-j0gI7d/vmblock-only/vmblock.ko
make[1]: Leaving directory `/usr/src/kernels/3.5.2-3.fc17.i686.PAE'
/usr/bin/make -C $PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= postbuild
make[1]: Entering directory `/tmp/modconfig-j0gI7d/vmblock-only'
make[1]: `postbuild' is up to date.
make[1]: Leaving directory `/tmp/modconfig-j0gI7d/vmblock-only'
cp -f vmblock.ko ./../vmblock.o
make: Leaving directory `/tmp/modconfig-j0gI7d/vmblock-only'
Using 2.6.x kernel build system.
make: Entering directory `/tmp/modconfig-j0gI7d/vmci-only'
/usr/bin/make -C /lib/modules/3.5.2-3.fc17.i686.PAE/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= modules
make[1]: Entering directory `/usr/src/kernels/3.5.2-3.fc17.i686.PAE'
CC [M] /tmp/modconfig-j0gI7d/vmci-only/linux/driver.o
CC [M] /tmp/modconfig-j0gI7d/vmci-only/linux/vmciKernelIf.o
CC [M] /tmp/modconfig-j0gI7d/vmci-only/common/vmciDatagram.o
CC [M] /tmp/modconfig-j0gI7d/vmci-only/common/vmciDriver.o
CC [M] /tmp/modconfig-j0gI7d/vmci-only/common/vmciResource.o
CC [M] /tmp/modconfig-j0gI7d/vmci-only/common/vmciRoute.o
CC [M] /tmp/modconfig-j0gI7d/vmci-only/common/vmciContext.o
CC [M] /tmp/modconfig-j0gI7d/vmci-only/common/vmciHashtable.o
CC [M] /tmp/modconfig-j0gI7d/vmci-only/common/vmciEvent.o
CC [M] /tmp/modconfig-j0gI7d/vmci-only/common/vmciQueuePair.o
CC [M] /tmp/modconfig-j0gI7d/vmci-only/common/vmciQPair.o
CC [M] /tmp/modconfig-j0gI7d/vmci-only/common/vmciDoorbell.o
CC [M] /tmp/modconfig-j0gI7d/vmci-only/driverLog.o
LD [M] /tmp/modconfig-j0gI7d/vmci-only/vmci.o
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/modconfig-j0gI7d/vmci-only/vmci.mod.o
LD [M] /tmp/modconfig-j0gI7d/vmci-only/vmci.ko
make[1]: Leaving directory `/usr/src/kernels/3.5.2-3.fc17.i686.PAE'
/usr/bin/make -C $PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= postbuild
make[1]: Entering directory `/tmp/modconfig-j0gI7d/vmci-only'
make[1]: `postbuild' is up to date.
make[1]: Leaving directory `/tmp/modconfig-j0gI7d/vmci-only'
cp -f vmci.ko ./../vmci.o
make: Leaving directory `/tmp/modconfig-j0gI7d/vmci-only'
Using 2.6.x kernel build system.
make: Entering directory `/tmp/modconfig-j0gI7d/vsock-only'
/usr/bin/make -C /lib/modules/3.5.2-3.fc17.i686.PAE/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= modules
make[1]: Entering directory `/usr/src/kernels/3.5.2-3.fc17.i686.PAE'
CC [M] /tmp/modconfig-j0gI7d/vsock-only/linux/af_vsock.o
CC [M] /tmp/modconfig-j0gI7d/vsock-only/linux/vsockAddr.o
CC [M] /tmp/modconfig-j0gI7d/vsock-only/linux/notifyQState.o
CC [M] /tmp/modconfig-j0gI7d/vsock-only/linux/util.o
CC [M] /tmp/modconfig-j0gI7d/vsock-only/linux/stats.o
CC [M] /tmp/modconfig-j0gI7d/vsock-only/linux/notify.o
CC [M] /tmp/modconfig-j0gI7d/vsock-only/driverLog.o
LD [M] /tmp/modconfig-j0gI7d/vsock-only/vsock.o
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/modconfig-j0gI7d/vsock-only/vsock.mod.o
LD [M] /tmp/modconfig-j0gI7d/vsock-only/vsock.ko
make[1]: Leaving directory `/usr/src/kernels/3.5.2-3.fc17.i686.PAE'
/usr/bin/make -C $PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= postbuild
make[1]: Entering directory `/tmp/modconfig-j0gI7d/vsock-only'
make[1]: `postbuild' is up to date.
make[1]: Leaving directory `/tmp/modconfig-j0gI7d/vsock-only'
cp -f vsock.ko ./../vsock.o
make: Leaving directory `/tmp/modconfig-j0gI7d/vsock-only'
Starting vmware (via systemctl):

All done, you can now run VMWare WorkStation.
Modules sources backup can be found in the '/usr/lib/vmware/modules/source-workstation9.0.0-2012-09-04-18:51:38-backup' directory
[/code]

The shell script patched the “vmmon-only/linux/hostif.c” file and then recompiled the VMware Workstation kernel modules. After the modules re-compiled, I was successfully able to power on my VMs.

2 Pingbacks/Trackbacks