Hi On Sat, Feb 15, 2020 at 1:34 AM Kevin Buettner <[email protected]> wrote: > > [Included a "Signed-off-by" line in this version.] > > I recently investigated a bug in which the dump-guest-memory.py script > sees a gdb.MemoryError exception while attempting to dump memory > obtained from a QEMU core dump. (And, yes, dump-guest-core=on was > specified in the -machine option of the QEMU invocation.) > > It turns out that memory region in question is not being placed in the > core dump and, after stepping through the kernel core dumping code > responsible for making this decision, it looks reasonable to me to not > include that region in the core dump. The region in question consists > of all zeros and, according to the kernel's logic, has never been > written to. > > This commit makes a small change to the dump-guest-memory script to > cause inaccessible memory to be dumped as zeroes. This avoids the > exception and places the correct values in the guest memory dump. > > Signed-off-by: Kevin Buettner <[email protected]>
fwiw, Kevin fixed it in gdb: https://sourceware.org/ml/gdb-patches/2020-03/msg00106.html > --- > scripts/dump-guest-memory.py | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py > index 4177261d33..fbdfba458b 100644 > --- a/scripts/dump-guest-memory.py > +++ b/scripts/dump-guest-memory.py > @@ -539,7 +539,12 @@ shape and this command should mostly work.""" > > while left > 0: > chunk_size = min(TARGET_PAGE_SIZE, left) > - chunk = qemu_core.read_memory(cur, chunk_size) > + try: > + chunk = qemu_core.read_memory(cur, chunk_size) > + except gdb.MemoryError: > + # Consider blocks of memory absent from a core file > + # as being zeroed. > + chunk = bytes(chunk_size) > vmcore.write(chunk) > cur += chunk_size > left -= chunk_size > -- > 2.24.1 > > -- Marc-André Lureau
