From: "Marc-André Lureau" <marcandre.lureau@redhat.com>
To: qemu-devel@nongnu.org
Cc: imammedo@redhat.com, anderson@redhat.com, berrange@redhat.com,
ehabkost@redhat.com, lersek@redhat.com,
"Marc-André Lureau" <marcandre.lureau@redhat.com>
Subject: [Qemu-devel] [PATCH 0/7] KASLR kernel dump support
Date: Thu, 29 Jun 2017 15:23:03 +0200 [thread overview]
Message-ID: <20170629132310.18865-1-marcandre.lureau@redhat.com> (raw)
Recent linux kernels enable KASLR to randomize phys/virt memory
addresses. This series aims to provide enough information in qemu
dumps so that crash utility can work with randomized kernel too (it
hasn't been tested on other archs than x86 though, help welcome).
The vmcoreinfo device is an emulated ACPI device that exposes a 4k
memory range to the guest to store various informations useful to
debug the guest OS. (it is greatly inspired by the VMGENID device
implementation). The version field with value 0 is meant to give
paddr/size of the VMCOREINFO ELF PT_NOTE, other values can be used for
different purposes or OSes. (note: some wanted to see pvpanic somehow
merged with this device, I have no clear idea how to do that, nor do I
think this is a good idea since the devices are quite different, used
at different time for different purposes. And it can be done as a
future iteration if it is appropriate, feel free to send patches)
Crash 7.1.9 will parse the "phys_base" value from the VMCOREINFO note,
and thus will work with KASLR-dump produced by this series.
By priority, VMCOREINFO "phys_base" value is the most accurate. If not
available, qemu will keep the current guessed value.
The series implements the VMCOREINFO note addition in qemu ELF/kdump,
as well as the python scripts/dump-guest-memory.py.
To test:
Compile and run a guest kernel with CONFIG_RANDOMIZE_BASE=y.
Run qemu with -device vmcoreinfo.
Load the experimental vmcoreinfo module in guest
https://github.com/elmarco/vmgenid-test/blob/master/qemuvmci-test.c.
Produce an ELF dump:
{ "execute": "dump-guest-memory", "arguments": { "protocol": "file:dump", "paging": false } }
Produce a kdump:
{ "execute": "dump-guest-memory", "arguments": { "protocol": "file:dump", "paging": false, "format": "kdump-zlib" } }
Or with (gdb) dump-guest-memory, with scripts/dump-guest-memory.py script.
Analyze with crash >= 7.1.9
$ crash vmlinux dump
Marc-André Lureau (7):
vmgenid: replace x-write-pointer-available hack
acpi: add vmcoreinfo device
tests: add simple vmcoreinfo test
dump: add vmcoreinfo ELF note
kdump: add vmcoreinfo ELF note
scripts/dump-guest-memory.py: add vmcoreinfo
MAINTAINERS: add Dump maintainers
scripts/dump-guest-memory.py | 32 ++++++
include/hw/acpi/aml-build.h | 1 +
include/hw/acpi/bios-linker-loader.h | 2 +
include/hw/acpi/vmcoreinfo.h | 37 ++++++
include/hw/compat.h | 4 -
include/sysemu/dump.h | 2 +
dump.c | 165 ++++++++++++++++++++++++++-
hw/acpi/aml-build.c | 2 +
hw/acpi/bios-linker-loader.c | 6 +
hw/acpi/vmcoreinfo.c | 214 +++++++++++++++++++++++++++++++++++
hw/acpi/vmgenid.c | 9 +-
hw/i386/acpi-build.c | 14 +++
tests/vmcoreinfo-test.c | 130 +++++++++++++++++++++
MAINTAINERS | 7 ++
default-configs/arm-softmmu.mak | 1 +
default-configs/i386-softmmu.mak | 1 +
default-configs/x86_64-softmmu.mak | 1 +
docs/specs/vmcoreinfo.txt | 138 ++++++++++++++++++++++
hw/acpi/Makefile.objs | 1 +
tests/Makefile.include | 2 +
20 files changed, 753 insertions(+), 16 deletions(-)
create mode 100644 include/hw/acpi/vmcoreinfo.h
create mode 100644 hw/acpi/vmcoreinfo.c
create mode 100644 tests/vmcoreinfo-test.c
create mode 100644 docs/specs/vmcoreinfo.txt
--
2.13.1.395.gf7b71de06
next reply other threads:[~2017-06-29 13:23 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-29 13:23 Marc-André Lureau [this message]
2017-06-29 13:23 ` [Qemu-devel] [PATCH 1/7] vmgenid: replace x-write-pointer-available hack Marc-André Lureau
2017-06-29 14:11 ` Michael S. Tsirkin
2017-07-02 3:09 ` Ben Warren
2017-07-03 14:48 ` Eduardo Habkost
2017-07-03 18:06 ` Laszlo Ersek
2017-07-03 18:27 ` Eduardo Habkost
2017-07-03 18:35 ` Laszlo Ersek
2017-07-03 18:21 ` Michael S. Tsirkin
2017-07-03 18:38 ` Michael S. Tsirkin
2017-07-03 18:50 ` Eduardo Habkost
2017-07-03 19:51 ` Michael S. Tsirkin
2017-06-29 13:23 ` [Qemu-devel] [PATCH 2/7] acpi: add vmcoreinfo device Marc-André Lureau
2017-07-04 22:07 ` Laszlo Ersek
2017-07-05 13:54 ` Marc-André Lureau
2017-06-29 13:23 ` [Qemu-devel] [PATCH 3/7] tests: add simple vmcoreinfo test Marc-André Lureau
2017-06-29 13:23 ` [Qemu-devel] [PATCH 4/7] dump: add vmcoreinfo ELF note Marc-André Lureau
2017-07-04 23:48 ` Laszlo Ersek
2017-07-05 21:52 ` Marc-André Lureau
2017-07-06 10:29 ` Laszlo Ersek
2017-06-29 13:23 ` [Qemu-devel] [PATCH 5/7] kdump: " Marc-André Lureau
2017-07-05 0:07 ` Laszlo Ersek
2017-07-06 10:05 ` Marc-André Lureau
2017-06-29 13:23 ` [Qemu-devel] [PATCH 6/7] scripts/dump-guest-memory.py: add vmcoreinfo Marc-André Lureau
2017-07-05 0:22 ` Laszlo Ersek
2017-07-05 9:58 ` Marc-André Lureau
2017-07-05 11:05 ` Laszlo Ersek
2017-06-29 13:23 ` [Qemu-devel] [PATCH 7/7] MAINTAINERS: add Dump maintainers Marc-André Lureau
2017-07-05 0:26 ` Laszlo Ersek
2017-07-06 9:54 ` Marc-André Lureau
2017-07-06 10:17 ` Laszlo Ersek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170629132310.18865-1-marcandre.lureau@redhat.com \
--to=marcandre.lureau@redhat.com \
--cc=anderson@redhat.com \
--cc=berrange@redhat.com \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=lersek@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.