[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] RFH: difference in read-only mapped bios.bin - memory corru
From: |
Philipp Hahn |
Subject: |
[Qemu-devel] RFH: difference in read-only mapped bios.bin - memory corruption? |
Date: |
Mon, 14 Aug 2017 16:28:21 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 |
Hello,
I'm currently investigating a problem, were a Linux VM does not reboot
and gets stuck in the SeaBIOS reboot code:
I'm using SeaBIOS-1.7 from Debian with a more modern qemu-2.8
> virsh # qemu-monitor-command --hmp ucs41-414 info roms
> fw=genroms/kvmvapic.bin size=0x002400 name="kvmvapic.bin"
> addr=00000000fffe0000 size=0x020000 mem=rom name="bios.bin"
which (to my understanding) is mapped at two physical locations:
> virsh # qemu-monitor-command --hmp ucs41-414 info mtree
...> memory-region: system
...> 00000000000e0000-00000000000fffff (prio 1, R-): alias
isa-bios @pc.bios 0000000000000000-000000000001ffff
> 00000000fffe0000-00000000ffffffff (prio 0, R-): pc.bios
If I dump both regions and compare them, I get a difference:
> virsh # qemu-monitor-command --pretty --domain ucs41-414
> '{"execute":"pmemsave","arguments":{"val":917504,"size":131072,"filename":"/tmp/bios-low.dump"}}'
> virsh # qemu-monitor-command --pretty --domain ucs41-414
> '{"execute":"pmemsave","arguments":{"val":4294836224,"size":131072,"filename":"/tmp/bios-high.dump"}}'
> # diff --suppress-common-lines -y <(od -Ax -tx1 -w1 -v /tmp/bios-low.dump)
> <(od -Ax -tx1 -w1 -v /tmp/bios-high.dump)
> 00f798 fa | 00f798 80
> 00f799 7a | 00f799 89
> 00f79a f4 | 00f79a f2
> 016d40 00 | 016d40 ff
> 016d41 00 | 016d41 ff
> 016d42 00 | 016d42 ff
> 016d43 00 | 016d43 ff
The high address dump is the same as the original:
> # cmp -l /tmp/bios-high.dump /usr/share/seabios/bios.bin
> virsh # qemu-monitor-command --hmp ucs41-414 x/6i 0x00000000000ef78f
> 0x00000000000ef78f: mov $0xcf8,%esi
> 0x00000000000ef794: mov $0xfa000000,%eax
> 0x00000000000ef799: jp 0xef78f
^^^^^^^^^^^^^^ BUG: endless loop
> 0x00000000000ef79b: out %eax,(%dx)
> 0x00000000000ef79c: mov $0xfe,%dl
> 0x00000000000ef79e: in (%dx),%ax
> virsh # qemu-monitor-command --hmp ucs41-414 xp/6i 0x00000000fffef78f
> 0x00000000fffef78f: mov $0xcf8,%esi
> 0x00000000fffef794: mov $0x80000000,%eax
> 0x00000000fffef799: mov %esi,%edx
^^^^^^^^^^^^^^^^ CORRECT original code
> 0x00000000fffef79b: out %eax,(%dx)
> 0x00000000fffef79c: mov $0xfe,%dl
> 0x00000000fffef79e: in (%dx),%ax
(That's some code from seabios-1.7.0/src/pci.c)
I had exactly the same run some weeks ago, but I also get different
patterns:
> # diff --suppress-common-lines -y <(od -Ax -tx1 -w1 -v /tmp/bios2.dump) <(od
> -Ax -tx1 -w1 -v bios.bin)
> 00f798 f0 | 00f798 80
> 00f799 8d | 00f799 89
> 00f79a f3 | 00f79a f2
> 016d40 00 | 016d40 ff
> 016d41 00 | 016d41 ff
> 016d42 00 | 016d42 ff
> 016d43 00 | 016d43 ff
Not all runs lead to reboot problems, but I don't know if any other
corruption happened there.
I had a similar problem with OVMF back in June
<https://lists.nongnu.org/archive/html/qemu-devel/2017-06/msg03940.html>,
which I "solved" by upgrading the OVMF version: I have not seen the
problem there since than, but this problems looks very similar.
1. How can it be, that the low-mem ROM mapping is modified?
2. Can I tell QEMU or gdb to trap any modification of that 128 KiB area?
I'll try to get http://rr-project.org/ running, but any help is appreciated.
Philipp
--
Philipp Hahn
Open Source Software Engineer
Univention GmbH
be open.
Mary-Somerville-Str. 1
D-28359 Bremen
Tel.: +49 421 22232-0
Fax : +49 421 22232-99
address@hidden
http://www.univention.de/
Geschäftsführer: Peter H. Ganten
HRB 20755 Amtsgericht Bremen
Steuer-Nr.: 71-597-02876
- [Qemu-devel] RFH: difference in read-only mapped bios.bin - memory corruption?,
Philipp Hahn <=