All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Jones <drjones@redhat.com>
To: "Daniel P. Berrange" <berrange@redhat.com>
Cc: Laszlo Ersek <lersek@redhat.com>, Dave Young <dyoung@redhat.com>,
	qiaonuohan@cn.fujitsu.com, bhe@redhat.com, anderson@redhat.com,
	qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] virsh dump (qemu guest memory dump?): KASLR enabled linux guest support
Date: Wed, 9 Nov 2016 13:20:51 +0100	[thread overview]
Message-ID: <20161109122051.ztllxmhwsalds2qw@kamzik.brq.redhat.com> (raw)
In-Reply-To: <20161109115819.GG22181@redhat.com>

On Wed, Nov 09, 2016 at 11:58:19AM +0000, Daniel P. Berrange wrote:
> On Wed, Nov 09, 2016 at 12:48:09PM +0100, Andrew Jones wrote:
> > On Wed, Nov 09, 2016 at 11:37:35AM +0000, Daniel P. Berrange wrote:
> > > On Wed, Nov 09, 2016 at 12:26:17PM +0100, Laszlo Ersek wrote:
> > > > On 11/09/16 11:40, Andrew Jones wrote:
> > > > > On Wed, Nov 09, 2016 at 11:01:46AM +0800, Dave Young wrote:
> > > > >> Hi,
> > > > >>
> > > > >> Latest linux kernel enabled kaslr to randomiz phys/virt memory
> > > > >> addresses, we had some effort to support kexec/kdump so that crash
> > > > >> utility can still works in case crashed kernel has kaslr enabled.
> > > > >>
> > > > >> But according to Dave Anderson virsh dump does not work, quoted messages
> > > > >> from Dave below:
> > > > >>
> > > > >> """
> > > > >> with virsh dump, there's no way of even knowing that KASLR
> > > > >> has randomized the kernel __START_KERNEL_map region, because there is no
> > > > >> virtual address information -- e.g., like "SYMBOL(_stext)" in the kdump
> > > > >> vmcoreinfo data to compare against the vmlinux file symbol value.
> > > > >> Unless virsh dump can export some basic virtual memory data, which
> > > > >> they say it can't, I don't see how KASLR can ever be supported.
> > > > >> """
> > > > >>
> > > > >> I assume virsh dump is using qemu guest memory dump facility so it
> > > > >> should be first addressed in qemu. Thus post this query to qemu devel
> > > > >> list. If this is not correct please let me know.
> > > > >>
> > > > >> Could you qemu dump people make it work? Or we can not support virt dump
> > > > >> as long as KASLR being enabled. Latest Fedora kernel has enabled it in x86_64.
> > > > >>
> > > > > 
> > > > > When the -kernel command line option is used, then it may be possible
> > > > > to extract some information that could be used to supplement the memory
> > > > > dump that dump-guest-memory provides. However, that would be a specific
> > > > > use. In general, QEMU knows nothing about the guest kernel. It doesn't
> > > > > know where it is in the disk image, and it doesn't even know if it's
> > > > > Linux.
> > > > > 
> > > > > Is there anything a guest userspace application could probe from e.g.
> > > > > /proc that would work? If so, then the guest agent could gain a new
> > > > > feature providing that.
> > > > 
> > > > I fully agree. This is exactly what I suggested too, independently, in
> > > > the downstream thread, before arriving at this upstream thread. Let me
> > > > quote that email:
> > > > 
> > > > On 11/09/16 12:09, Laszlo Ersek wrote:
> > > > > [...] the dump-guest-memory QEMU command supports an option called
> > > > > "paging". Here's its documentation, from the "qapi-schema.json" source
> > > > > file:
> > > > >
> > > > >> # @paging: if true, do paging to get guest's memory mapping. This allows
> > > > >> #          using gdb to process the core file.
> > > > >> #
> > > > >> #          IMPORTANT: this option can make QEMU allocate several gigabytes
> > > > >> #                     of RAM. This can happen for a large guest, or a
> > > > >> #                     malicious guest pretending to be large.
> > > > >> #
> > > > >> #          Also, paging=true has the following limitations:
> > > > >> #
> > > > >> #             1. The guest may be in a catastrophic state or can have corrupted
> > > > >> #                memory, which cannot be trusted
> > > > >> #             2. The guest can be in real-mode even if paging is enabled. For
> > > > >> #                example, the guest uses ACPI to sleep, and ACPI sleep state
> > > > >> #                goes in real-mode
> > > > >> #             3. Currently only supported on i386 and x86_64.
> > > > >> #
> > > > >
> > > > > "virsh dump --memory-only" sets paging=false, for obvious reasons.
> > > > >
> > > > > [...] the dump-guest-memory command provides a raw snapshot of the
> > > > > virtual machine's memory (and of the registers of the VCPUs); it is
> > > > > not enlightened about the guest.
> > > > >
> > > > > If the additional information you are looking for can be retrieved
> > > > > within the running Linux guest, using an appropriately privieleged
> > > > > userspace process, then I would recommend considering an extension to
> > > > > the qemu guest agent. The management layer (libvirt, [...]) could
> > > > > first invoke the guest agent (a process with root privileges running
> > > > > in the guest) from the host side, through virtio-serial. The new guest
> > > > > agent command would return the information necessary to deal with
> > > > > KASLR. Then the management layer would initiate the dump like always.
> > > > > Finally, the extra information would be combined with (or placed
> > > > > beside) the dump file in some way.
> > > > >
> > > > > So, this proposal would affect the guest agent and the management
> > > > > layer (= libvirt).
> > > > 
> > > > Given that we already dislike "paging=true", enlightening
> > > > dump-guest-memory with even more guest-specific insight is the wrong
> > > > approach, IMO. That kind of knowledge belongs to the guest agent.
> > > 
> > > If you're trying to debug a hung/panicked guest, then using a guest
> > > agent to fetch info is a complete non-starter as it'll be dead.
> > 
> > So don't wait. Management software can make this query immediately
> > after the guest agent goes live. The information needed won't change.
> 
> That doesn't help with trying to diagnose a crash during boot up, since
> the guest agent isn't running till fairly late. I'm also concerned that
> the QEMU guest agent is likely to be far from widely deployed in guests,
> so reliance on the guest agent will mean the dump facility is no longer
> reliably available.
>

It'd still be reliably available and useable during early boot, just like
it is now, for kernels that don't use KASLR. This proposal is only
attempting to *also* address KASLR kernels, for which there is currently
no support whatsoever. Call it a best-effort.

Of course we can get support for [probably] early boot and
guest-agent-less guests using KASLR too if we introduce a paravirt
solution, requiring guest kernel and KVM changes. Is it worth it?

Thanks,
drew

  reply	other threads:[~2016-11-09 12:21 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-09  3:01 [Qemu-devel] virsh dump (qemu guest memory dump?): KASLR enabled linux guest support Dave Young
2016-11-09  3:17 ` Dave Young
2016-11-09  3:58   ` Wen Congyang
2016-11-09  5:02     ` Dave Young
2016-11-09  7:42       ` Wen Congyang
2016-11-09  8:25         ` Dave Young
2016-11-09 14:36       ` Dave Anderson
2016-11-09 14:42         ` Daniel P. Berrange
2016-11-09 10:40 ` Andrew Jones
2016-11-09 11:26   ` Laszlo Ersek
2016-11-09 11:37     ` Daniel P. Berrange
2016-11-09 11:48       ` Andrew Jones
2016-11-09 11:58         ` Daniel P. Berrange
2016-11-09 12:20           ` Andrew Jones [this message]
2016-11-09 14:47             ` Daniel P. Berrange
2016-11-09 15:38               ` Laszlo Ersek
2016-11-09 16:01                 ` Daniel P. Berrange
2016-11-14 10:27                   ` Paolo Bonzini
2016-11-14  5:32                 ` Dave Young
2016-11-14  9:47                   ` Andrew Jones
2016-11-16  2:48                     ` Dave Young
2016-11-14 10:10                   ` Daniel P. Berrange
2016-11-14 10:28                     ` Paolo Bonzini
2016-11-14 10:33                       ` Daniel P. Berrange
2016-11-14 11:08                         ` Laszlo Ersek
2016-11-14 11:55                         ` Paolo Bonzini
2016-11-09 15:28   ` Dave Anderson
2016-11-14 10:41     ` Paolo Bonzini
2016-11-15 14:41       ` Dave Anderson
2016-11-09 14:32 ` Dave Anderson

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=20161109122051.ztllxmhwsalds2qw@kamzik.brq.redhat.com \
    --to=drjones@redhat.com \
    --cc=anderson@redhat.com \
    --cc=berrange@redhat.com \
    --cc=bhe@redhat.com \
    --cc=dyoung@redhat.com \
    --cc=lersek@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qiaonuohan@cn.fujitsu.com \
    /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.