ping On Mon, Sep 25, 2017 at 12:52 PM, Marc-André Lureau <marcandre.lur...@gmail.com> wrote: > ping > > On Mon, Sep 11, 2017 at 6:59 PM, Marc-André Lureau > <marcandre.lur...@redhat.com> wrote: >> 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 previous design to provide qemu with debug details (using qemu-ga >> and a dedicated vmcoreinfo ACPI device) failed to satisfy the >> requirements during previous iterations. >> >> In particular, the previous proposed vmcoreinfo ACPI device had the >> following issues: >> - hazardous memory handling with no explicit synchronization >> - occupy 2 fw-cfg entries (for memory and pointer) >> - occupy 4k of guest memory (this could have been tweaked) >> - did not provide ACPI methods (this could have been added) >> - may be difficult to maintain compatibility (according to Michael) >> >> This is a new proposal, that leverage fw-cfg device instead of adding >> a new device. A "etc/vmcoreinfo" entry is added, where the guest, >> during boot or later, can write the addr/size location of an ELF note >> to be appended in the qemu dump. >> >> Note: only guest kernel is expected to write to a fw-cfg entry. This >> method is not meant for general qemu/user-space communication. There >> are more appropriate devices for this purpose, and the guest kernel >> should not expose this facility. >> >> This is quite easier to implement, and uses less of the limited fw-cfg >> slots, and guest memory. It also solves the synchronization issue, and >> may be easier to discover or to maintain compatibility. >> >> The Linux ELF note is expected to be the VMCOREINFO note, which will >> have a special handling in qemu in this case helping kaslr-kernel >> debugging. But it could be any valid ELF note. >> >> 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. >> >> The series implements the note addition in qemu ELF/kdump, >> as well as the python scripts/dump-guest-memory.py. >> >> To test: >> >> Using kernel from https://github.com/elmarco/linux fw-cfg branch, >> Compile and run guest kernel with CONFIG_RANDOMIZE_BASE=y & >> CONFIG_FW_CFG_SYSFS=y. >> >> Run qemu with -device vmcoreinfo >> >> 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 (or the git version for 4.13 fixes..): >> >> $ crash vmlinux dump >> >> v6: after Michael Tsirkin review >> - rebased >> - modify fw_cfg write callback, called for all write >> - back to a seperate -device vmcoreinfo >> - add host_format/guest_format fields >> - clear/reset fw_cfg entry values on reset >> - write 0 as guest format to disable device >> >> v5: >> - removed x-write-pointer-available patch from this series >> - drop vmcoreinfo device >> - add write callback to fw_cfg entries >> - add a writable fw_cfg "vmcoreinfo" entry >> - split phys_base update from VMCOREINFO note in a seperate patch >> - most patches had non-trivial changes, dropping reviewed-by tags >> >> v4: from Laszlo review >> - switch to warn_report*() >> - update test to follow vmgenid and use boot-sector infrastructure >> - fix range checks in the python script >> - add vmcoreinfo_get() stub >> >> v3: from Laszlo review >> - change vmcoreinfo offset to 36 >> - reset err to null after report >> - use PRIu32 >> - change name_size and desc_size against MAX_VMCOREINFO_SIZE >> - python code simplification >> - check boundaries of blocks in phys_memory_read() >> - fix some vmgi vs vmci names >> - add more comments in code >> - fix comment indentation >> - add r-b tags >> >> v2: from Laszlo review >> - vmci: fix guest endianess handling >> - vmci: fix wrong sizeof() >> - vmci: add back reset logic from vmgenid >> - dump: have 1MB size limit for vmcoreinfo >> - dump: fix potential off-by-1 buffer manipulation >> - dump: use temporary variable for qemu_strtou64 >> - dump: fixed VMCOREINFO duplication in kdump >> - update gdb script to not call into qemu process >> - update MAINTAINERS with some new files >> >> Marc-André Lureau (7): >> fw_cfg: add write callback >> hw/misc: add vmcoreinfo device >> dump: add guest ELF note >> dump: update phys_base header field based on VMCOREINFO content >> kdump: set vmcoreinfo location >> scripts/dump-guest-memory.py: add vmcoreinfo >> MAINTAINERS: add Dump maintainers >> >> scripts/dump-guest-memory.py | 61 +++++++++++++++ >> include/hw/misc/vmcoreinfo.h | 46 +++++++++++ >> include/hw/nvram/fw_cfg.h | 3 + >> include/sysemu/dump.h | 2 + >> dump.c | 183 >> +++++++++++++++++++++++++++++++++++++++++++ >> hw/acpi/vmgenid.c | 2 +- >> hw/core/loader.c | 2 +- >> hw/i386/acpi-build.c | 2 +- >> hw/isa/lpc_ich9.c | 4 +- >> hw/misc/vmcoreinfo.c | 96 +++++++++++++++++++++++ >> hw/nvram/fw_cfg.c | 14 +++- >> MAINTAINERS | 11 +++ >> docs/specs/vmcoreinfo.txt | 49 ++++++++++++ >> hw/misc/Makefile.objs | 1 + >> 14 files changed, 467 insertions(+), 9 deletions(-) >> create mode 100644 include/hw/misc/vmcoreinfo.h >> create mode 100644 hw/misc/vmcoreinfo.c >> create mode 100644 docs/specs/vmcoreinfo.txt >> >> -- >> 2.14.1.146.gd35faa819 >> >> > > > > -- > Marc-André Lureau
-- Marc-André Lureau