Сбои гостевого ядра с ошибкой защиты режима супервизора при мониторинге с использованием Intel PEBS - PullRequest
0 голосов
/ 09 марта 2020

Я отслеживаю доступ к памяти моей тестовой программы с помощью Intel PEBS (Precise Event-Based Sampling). Я не хочу использовать PEBS, используя существующую инфраструктуру PERF (по разным причинам). Итак, я написал свой собственный модуль ядра для Intel PEBS и обрабатываю все события NMI внутри моего модуля ядра. Я могу успешно регистрировать доступ к памяти, когда тестовая программа изначально работает на хост-системе. Все отлично работает

Но когда я пытаюсь запустить тестовую программу внутри виртуальной машины (работающей через QEMU / KVM), у моего гостевого ядра cra sh с ошибкой после ошибки. Вылетает только ядро ​​гостя. Ядро хоста стабильно:

# PF: доступ супервизора для чтения в режиме пользователя .

Я попытался поиграть с отключением / включением SMEP, SMAP, LAPI C и другие опции в гостевом и хостовом ядре. Все еще происходит sh.

Я использую процессор Intel® Xeon® Gold 6230 @ 2.10 ГГц, Host Kernel Linux Версия 5.4.0 (аналогично версии Guest Kernel).

Журналы из гостевого ядра :

BUG: unable to handle page fault for address: ffff9c122e8a1038
[   76.011730] #PF: supervisor read access in user mode
[   76.012190] #PF: error_code(0x0000) - not-present page
[   76.012603] IDT: 0xfffffe0000000000 (limit=0xfff) GDT: 0xfffffe0000034000 (limit=0x7f)
[   76.013206] LDTR: NULL
[   76.013398] TR: 0x40 -- base=0xfffffe0000036000 limit=0x206f
[   76.013852] PGD 0 P4D 0
[   76.014041] Oops: 0000 [#1] SMP
[   76.014274] CPU: 1 PID: 953 Comm: one_page Not tainted 5.4.0-rc7 #4
[   76.014738] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1ubuntu1 04/01/2014
[   76.015394] RIP: 0033:0x55bd4855cd56
[   76.015661] Code: 85 5c ff ff ff 00 00 00 00 eb 26 48 8b 05 e2 12 20 00 8b 95 5c ff ff ff 48 63 d2 48 c1 e2 02 48 01 d0 8b 00 88
 85 5b ff ff ff <83> 85 5c ff ff ff 01 81 bd 5c ff ff ff ff 0f 00 00 7e ce 8b 05 a1
[   76.017081] RSP: 002b:00007fff48cf8810 EFLAGS: 00010202
[   76.017477] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
[   76.018038] RDX: 0000000000000b60 RSI: 00007fff48cf86d0 RDI: 0000000000000002
[   76.018556] RBP: 00007fff48cf88d0 R08: 0000000000000000 R09: 0000000000000000
[   76.019077] R10: 0000000000000008 R11: 0000000000000246 R12: 000055bd4855c8c0
[   76.019599] R13: 00007fff48cf89b0 R14: 0000000000000000 R15: 0000000000000000
[   76.020116] FS:  00007f2b93ce34c0 GS:  0000000000000000
[   76.020533] Modules linked in: nfsv3 nfs_acl rpcsec_gss_krb5 auth_rpcgss nfsv4 nfs lockd grace fscache intel_rapl_msr intel_rapl
_common crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel crypto_simd cryptd dax_pmem_compat device_dax nd_pmem glue_he
lper dax_pmem_core nd_btt ppdev joydev parport_pc input_leds nfit intel_rapl_perf mac_hid qemu_fw_cfg serio_raw sch_fq_codel sunrpc
 lp parport ip_tables x_tables psmouse virtio_blk virtio_net net_failover failover i2c_piix4 pata_acpi floppy
[   76.023751] CR2: ffff9c122e8a1038
[   76.023997] ---[ end trace 10450321a820a090 ]---

1 Ответ

0 голосов
/ 16 марта 2020

Я получаю похожее сообщение с именем guest = ubuntu 19.10 / x86_64 в QEMU / tcg, где host = ubuntu 19.10 / x86_64. Гостевое приложение do tnet. Я не могу исправить ошибку с приложениями из linux тестового проекта или моего собственного направленного тестирования. Пожалуйста, смотрите https://bugs.launchpad.net/qemu/+bug/1866892 Приложение работает нормально без QEMU в пути.

...