1. 動作環境
CPU: AMD Phenom(tm) II X6 1065T Processor
memory: 8GB
Disk: SATA 500GB + USB2.0 2TB
CentOS6.5 ( update CentOS6.0 → CentOS6.4 → CentOS6.5 )
kernel-2.6.32-431.el6.x86_64
vmware-player-6.0.1 build-1379776
2. kernel panic 発生の状況
USBディスク側に windowsXP sp3 バーチャルホストをインストールし、問題なく動作していた環境であったが、
CentOS6.4 → CentOS6.5 へアップデートしたところ、XP 起動直後に以下のような kernel panic が発生するようになった。
<1>BUG: unable to handle kernel paging request at 00000001ffffffff
<1>IP: [<00000001ffffffff>] 0x1ffffffff
<4>PGD 0
<4>Oops: 0010 [#1] SMP
<4>last sysfs file: /sys/devices/system/cpu/online
<4>CPU 0
<4>Modules linked in: bluetooth rfkill ext3 jbd vmnet(U) fuse vsock(U) vmci(U) vmmon(U) ipv6 ipt_REJECT nf_conntrack_ipv4 nf_defrag_ipv4 xt_state nf_conntrack iptable_filter ip_tables uinput ppdev microcode parport_pc parport serio_raw e1000 sg k10temp edac_core edac_mce_amd snd_hda_codec_realtek snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device snd_pcm snd_timer snd soundcore snd_page_alloc i2c_piix4 r8169 mii shpchp ext4 jbd2 mbcache sr_mod cdrom sd_mod crc_t10dif pata_acpi ata_generic pata_atiixp ahci usb_storage radeon ttm drm_kms_helper drm i2c_algo_bit i2c_core dm_mirror dm_region_hash dm_log dm_mod [last unloaded: scsi_wait_scan]
<4>
<4>Pid: 2285, comm: vmplayer Not tainted 2.6.32-431.el6.x86_64 #1 ThirdWave Corporation Prime Series/880GM-LE
<4>RIP: 0010:[<00000001ffffffff>] [<00000001ffffffff>] 0x1ffffffff
<4>RSP: 0018:ffff8802154eddc0 EFLAGS: 00010206
<4>RAX: 00000001ffffffff RBX: ffff8801ec317a48 RCX: ffff88021a54f1a0
<4>RDX: 0000000000000001 RSI: 0000000000000287 RDI: ffff8801ec317a00
<4>RBP: ffff8802154edde8 R08: ffffffff81eb2790 R09: 0000000000000000
<4>R10: 0000000000000000 R11: 0000000000000000 R12: ffff8801ec317a00
<4>R13: 00000000ffffff8d R14: ffff88021a54f180 R15: ffff8802154edec8
<4>FS: 00007f825a360700(0000) GS:ffff880028200000(0000) knlGS:0000000000000000
<4>CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
<4>CR2: 00000001ffffffff CR3: 00000001ff210000 CR4: 00000000000007f0
<4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
<4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
<4>Process vmplayer (pid: 2285, threadinfo ffff8802154ec000, task ffff88021a0a4aa0)
<4>Stack:
<4> ffffffff8144b2a1 ffff8802154eddd8 00000000000007d0 ffff8801ec317a00
<4><d> 00000000ffffff8d ffff8802154edea8 ffffffffa04683d0 ffffffffffffffff
<4><d> 0000000000000710 ffff88021ac900c0 0000080200000003 0000000000000000
<4>Call Trace:
<4> [<ffffffff8144b2a1>] ? release_sock+0xb1/0xf0
<4> [<ffffffffa04683d0>] VSockVmciAllowDgram+0xd1c/0x2e38 [vsock]
<4> [<ffffffff8109b2a0>] ? autoremove_wake_function+0x0/0x40
<4> [<ffffffff81448867>] sys_connect+0xd7/0xf0
<4> [<ffffffff810e2067>] ? audit_syscall_entry+0x1d7/0x200
<4> [<ffffffff810e1e5e>] ? __audit_syscall_exit+0x25e/0x290
<4> [<ffffffff8100b072>] system_call_fastpath+0x16/0x1b
<4>Code: Bad RIP value.
<1>RIP [<00000001ffffffff>] 0x1ffffffff
<4> RSP <ffff8802154eddc0>
<4>CR2: 00000001ffffffff
3. 原因について
以下 URL を参照。
(symptom が同一であることから、同件と推定してよさそう。)
http://weedily4.rssing.com/chan-3946349/all_p1566.html
同 URL の内容および症状から、vmware-player 側で供給されている vsock モジュールおよび 6.5 kernelとの間の問題のようである。
kernel page request のメモリ番地が不正であることから bug() へ飛び panic しているものと思われる。以下に lsmod の結果を示す。
# lsmod
Module Size Used by
bluetooth 99239 0
rfkill 19255 1 bluetooth
ext3 232456 1
jbd 79103 1 ext3
vmnet 46758 17
fuse 70066 4
vsock 46726 0 <------------------------ vsock module
vmci 74263 3 vsock
vmmon 72910 23
ipv6 321614 34
ipt_REJECT 2351 2
nf_conntrack_ipv4 9506 2
nf_defrag_ipv4 1483 1 nf_conntrack_ipv4
xt_state 1492 2
nf_conntrack 79645 2 nf_conntrack_ipv4,xt_state
iptable_filter 2793 1
ip_tables 17831 1 iptable_filter
uinput 7992 0
ppdev 8537 0
microcode 112653 0
parport_pc 22690 0
parport 36209 2 ppdev,parport_pc
serio_raw 4594 0
e1000 170678 0
sg 29350 0
k10temp 3609 0
edac_core 46581 0
edac_mce_amd 14705 0
snd_hda_codec_hdmi 26157 1
snd_hda_codec_realtek 68136 1
snd_hda_intel 27823 2
snd_hda_codec 121518 3 snd_hda_codec_hdmi,snd_hda_codec_realtek,snd_hda_intel
snd_hwdep 6652 1 snd_hda_codec
snd_seq 55759 0
snd_seq_device 6500 1 snd_seq
snd_pcm 86635 3 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec
snd_timer 22411 2 snd_seq,snd_pcm
snd 69907 13 snd_hda_codec_hdmi,snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_seq,snd_seq_device,snd_pcm,snd_timer
soundcore 7958 1 snd
snd_page_alloc 8470 2 snd_hda_intel,snd_pcm
i2c_piix4 12608 0
r8169 60023 0
mii 5376 1 r8169
shpchp 32778 0
ext4 363344 2
jbd2 91554 1 ext4
mbcache 8193 2 ext3,ext4
sr_mod 15177 0
cdrom 39085 1 sr_mod
sd_mod 38976 6
crc_t10dif 1541 1 sd_mod
pata_acpi 3701 0
ata_generic 3837 0
pata_atiixp 4211 0
ahci 41127 3
usb_storage 49068 1
radeon 917108 2
ttm 80957 1 radeon
drm_kms_helper 40087 1 radeon
drm 265638 4 radeon,ttm,drm_kms_helper
i2c_algo_bit 5935 1 radeon
i2c_core 31084 5 i2c_piix4,radeon,drm_kms_helper,drm,i2c_algo_bit
dm_mirror 14133 0
dm_region_hash 12085 1 dm_mirror
dm_log 9930 2 dm_mirror,dm_region_hash
dm_mod 82839 2 dm_mirror,dm_log
# modinfo vsock
filename: /lib/modules/2.6.32-358.23.2.el6.x86_64/misc/vsock.ko
supported: external
alias: vmware_vsock
license: GPL v2
version: 9.5.7.0
description: VMware Virtual Socket Family
author: VMware, Inc. <------------------------------ not bundle module
depends: vmci
vermagic: 2.6.32-131.0.15.el6.x86_64 SMP mod_unload modversions
4. 対応
stack trace からは connect() → VSockVmciAllowDgram() → release_sock() の流れで panic が発生しているが、
VSockVmciAllowDgram() は vmware-tools に含まれるとのこと。
では、kernel 側が悪いのか、vsock 側が悪いのかという疑問が沸いてくるが、現状ではどちらのせいか判断するのは少々難しい。
常識的には vsock が kernel に不正な値を渡したんだろ、ということになるだろうが、6.4 では問題が発生しなかったことを考えると、一概に vsock のせい、とは言えないような気がする。
また、我が家では windows8.1 では問題なく、XP でだけ panic が発生するという奇妙な特異性があった。
先に示した URL のユーザも win7 とのことである。とすると、windows8.1 を除くホスト OS 側の動作も絡んでいるようで、さらに事態は怪しさを帯びる…。
で、結局どうしたかと言えば、kernel を 6.4 の 2.6.32-358.23.2.el6.x86_64 まで下げることで対応した。
このバージョンでは問題が発生していなかったからだが、ホスト OS 側の kernel panic を誘発しているのなら、
kernel バージョンを下げることによって対処できるかも、と思ったからである。
# grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda3
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-431.el6.x86_64)
root (hd0,0)
# kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=96b340c9-9e47-4acd-927f-43e63893bfed rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=ja_JP.UTF-8 KEYBOARDTYPE=pc KEYTABLE=jp106 crashkernel=auto rhgb quiet
kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=96b340c9-9e47-4acd-927f-43e63893bfed rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=ja_JP.UTF-8 KEYBOARDTYPE=pc KEYTABLE=jp106 crashkernel=auto
initrd /initramfs-2.6.32-431.el6.x86_64.img
title CentOS (2.6.32-358.23.2.el6.x86_64)
root (hd0,0)
# kernel /vmlinuz-2.6.32-358.23.2.el6.x86_64 ro root=UUID=96b340c9-9e47-4acd-927f-43e63893bfed rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=ja_JP.UTF-8 KEYBOARDTYPE=pc KEYTABLE=jp106 crashkernel=auto rhgb quiet
kernel /vmlinuz-2.6.32-358.23.2.el6.x86_64 ro root=UUID=96b340c9-9e47-4acd-927f-43e63893bfed rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=ja_JP.UTF-8 KEYBOARDTYPE=pc KEYTABLE=jp106 crashkernel=auto
initrd /initramfs-2.6.32-358.23.2.el6.x86_64.img
title CentOS (2.6.32-71.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=UUID=96b340c9-9e47-4acd-927f-43e63893bfed rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=ja_JP.UTF-8 KEYBOARDTYPE=pc KEYTABLE=jp106 crashkernel=auto rhgb quiet
initrd /initramfs-2.6.32-71.el6.x86_64.img
結果は吉。
もう少し様子を見る必要があると思うが、これまでのところ、事象は再発していない。
同様の事象に悩まされている方があれば、/boot/grub/grub.conf の default=0 を編集し、default=1 なりして、
問題を回避できる kernel バージョンを探してみるのも手ではないかと思う。
以上。