Skip to content

Resetting or reading coverage counters crashes xen

Description:

Coverage hypercalls crash xen:

(XEN) ----[ Xen-4.18-unstable  x86_64  debug=y gcov=y  Not tainted ]----
(XEN) CPU:    1
(XEN) RIP:    e008:[<ffff82d0402568b2>] gcov_info_reset+0x83/0xa5
(XEN) RFLAGS: 0000000000010202   CONTEXT: hypervisor (d0v0)
(XEN) rax: 0000000000000000   rbx: ffff82d0405f7c60   rcx: 0000000000000000
(XEN) rdx: ffff82d04054ea00   rsi: 0000000000000000   rdi: ffff82d0405f7c60
(XEN) rbp: ffff83003f97fcc8   rsp: ffff83003f97fca0   r8:  ffff82d04073eee0
(XEN) r9:  0000000000000000   r10: ffff83003f9bfc50   r11: 0000000000000000
(XEN) r12: 0000000000000000   r13: ffff82d0405f7cc0   r14: 0000000000000000
(XEN) r15: ffff82d0405f7c60   cr0: 0000000080050033   cr4: 0000000000362660
(XEN) cr3: 000000003eaeb000   cr2: ffff82d04054ea00
(XEN) fsb: 0000000000000000   gsb: 0000000000000000   gss: 0000000000000000
(XEN) ds: e02b   es: e02b   fs: e02b   gs: e02b   ss: e010   cs: e008
(XEN) Xen code around <ffff82d0402568b2> (gcov_info_reset+0x83/0xa5):
(XEN)  1d 44 89 f0 49 8b 57 68 <4c> 8b 24 c2 49 83 c4 18 48 83 05 c6 bd 4d 00 01
(XEN) Xen stack trace from rsp=ffff83003f97fca0:
(XEN)    ffff82d0405f7c60 0000000000000000 0000000000000001 ffff82d0405735d8
(XEN)    ffff82d040723100 ffff83003f97fce0 ffff82d040256766 ffff83003f97fdc8
(XEN)    ffff83003f97fd00 ffff82d040256261 ffff83003f97ffff ffff83003f97ffff
(XEN)    ffff83003f97fe70 ffff82d040254a9d ffff83003f97fd28 ffff82d040242189
(XEN)    0000000000000002 ffff83003f97fd40 0000000000000046 0000000000000000
(XEN)    000000000010df58 ffff82d04028255c 0101000000000046 0000000000000046
(XEN)    ffff82d040573638 ffff83003f97fdc8 ffff82d040457e40 ffff83003f97fd90
(XEN)    ffff82d040242189 0000000000000013 ffff83003f97fda0 ffff82d040242206
(XEN)    ffff83003f97fe70 ffff82d04027dc1a ffff820040000860 0000000000000013
(XEN)    0000001500000014 0000000000000002 0000000000000000 0000000000000000
(XEN)    0000000000000000 0000000000000000 0000000000000000 0000000000000000
(XEN)    0000000000000000 0000000000000000 0000000000000000 0000000000000000
(XEN)    0000000000000000 0000000000000000 0000000000000000 0000000000000000
(XEN)    0000000000000000 ffff83003f97fef8 0000000000000023 ffff83003f92e000
(XEN)    deadbeefdeadf00d 000000000010df58 ffff83003f97fee8 ffff82d04038cd89
(XEN)    0000000000000015 00000000ffffffff deadbeefdeadf00d 0000000000000000
(XEN)    ffff83003f97ffff 0000000000000000 ffff83003f97fee8 ffff82d0403f0686
(XEN)    ffff83003f92e000 0000000000000000 0000000000000000 0000000000000000
(XEN)    0000000000000000 00007cffc06800e7 ffff82d0402012bd 0000000000000000
(XEN)    0000000000000000 0000000000000000 0000000000000000 0000000000000000
(XEN) Xen call trace:
(XEN)    [<ffff82d0402568b2>] R gcov_info_reset+0x83/0xa5
(XEN)    [<ffff82d040256766>] F common/coverage/gcov.c#gcov_reset_all_counters+0x28/0x4e
(XEN)    [<ffff82d040256261>] F sysctl_cov_op+0x9b/0xad
(XEN)    [<ffff82d040254a9d>] F do_sysctl+0x582/0x1c8e
(XEN)    [<ffff82d04038cd89>] F pv_hypercall+0x860/0x91f
(XEN)    [<ffff82d0402012bd>] F lstar_enter+0x13d/0x150
(XEN)
(XEN) Pagetable walk from ffff82d04054ea00:
(XEN)  L4[0x105] = 000000003fd70063 ffffffffffffffff
(XEN)  L3[0x141] = 000000003fd6d063 ffffffffffffffff
(XEN)  L2[0x002] = 000000003ffff063 ffffffffffffffff
(XEN)  L1[0x14e] = 0000000000000000 ffffffffffffffff
(XEN)
(XEN) ****************************************
(XEN) Panic on CPU 1:
(XEN) FATAL PAGE FAULT
(XEN) [error_code=0000]
(XEN) Faulting linear address: ffff82d04054ea00
(XEN) ****************************************
(XEN)

This is due to some of the coverage information being in the .init code or data sections which are freed in init_done.

Reproduction instructions

Build xen with CONFIG_COVERAGE=y. Run it and in dom0 execute xencov read or xencov reset.

Edited by Javi Merino
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information