[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 25/30] Fix wrong behavior of cpu_memory_rw_debug() function in SMM
From: |
Paolo Bonzini |
Subject: |
[PULL 25/30] Fix wrong behavior of cpu_memory_rw_debug() function in SMM |
Date: |
Wed, 2 Oct 2019 18:51:48 +0200 |
From: Dmitry Poletaev <address@hidden>
There is a problem, that you don't have access to the data using
cpu_memory_rw_debug() function when in SMM. You can't remotely debug SMM mode
program because of that for example.
Likely attrs version of get_phys_page_debug should be used to get correct asidx
at the end to handle access properly.
Here the patch to fix it.
Signed-off-by: Dmitry Poletaev <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
target/i386/cpu.c | 2 +-
target/i386/cpu.h | 3 ++-
target/i386/helper.c | 5 ++++-
3 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 313a2ef..8fcb571 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -6245,7 +6245,7 @@ static void x86_cpu_common_class_init(ObjectClass *oc,
void *data)
#ifndef CONFIG_USER_ONLY
cc->asidx_from_attrs = x86_asidx_from_attrs;
cc->get_memory_mapping = x86_cpu_get_memory_mapping;
- cc->get_phys_page_debug = x86_cpu_get_phys_page_debug;
+ cc->get_phys_page_attrs_debug = x86_cpu_get_phys_page_attrs_debug;
cc->write_elf64_note = x86_cpu_write_elf64_note;
cc->write_elf64_qemunote = x86_cpu_write_elf64_qemunote;
cc->write_elf32_note = x86_cpu_write_elf32_note;
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
index 033991c..eaa5395 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
@@ -1690,7 +1690,8 @@ void x86_cpu_get_memory_mapping(CPUState *cpu,
MemoryMappingList *list,
void x86_cpu_dump_state(CPUState *cs, FILE *f, int flags);
-hwaddr x86_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr);
+hwaddr x86_cpu_get_phys_page_attrs_debug(CPUState *cpu, vaddr addr,
+ MemTxAttrs *attrs);
int x86_cpu_gdb_read_register(CPUState *cpu, uint8_t *buf, int reg);
int x86_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
diff --git a/target/i386/helper.c b/target/i386/helper.c
index 0fa51be..c3a6e4f 100644
--- a/target/i386/helper.c
+++ b/target/i386/helper.c
@@ -715,7 +715,8 @@ void cpu_x86_update_cr4(CPUX86State *env, uint32_t new_cr4)
}
#if !defined(CONFIG_USER_ONLY)
-hwaddr x86_cpu_get_phys_page_debug(CPUState *cs, vaddr addr)
+hwaddr x86_cpu_get_phys_page_attrs_debug(CPUState *cs, vaddr addr,
+ MemTxAttrs *attrs)
{
X86CPU *cpu = X86_CPU(cs);
CPUX86State *env = &cpu->env;
@@ -725,6 +726,8 @@ hwaddr x86_cpu_get_phys_page_debug(CPUState *cs, vaddr addr)
uint32_t page_offset;
int page_size;
+ *attrs = cpu_get_mem_attrs(env);
+
a20_mask = x86_get_a20_mask(env);
if (!(env->cr[0] & CR0_PG_MASK)) {
pte = addr & a20_mask;
--
1.8.3.1
- [PULL 14/30] ide: fix leak from qemu_allocate_irqs, (continued)
- [PULL 14/30] ide: fix leak from qemu_allocate_irqs, Paolo Bonzini, 2019/10/02
- [PULL 16/30] mcf5208: fix leak from qemu_allocate_irqs, Paolo Bonzini, 2019/10/02
- [PULL 15/30] microblaze: fix leak of fdevice tree blob, Paolo Bonzini, 2019/10/02
- [PULL 17/30] hppa: fix leak from g_strdup_printf, Paolo Bonzini, 2019/10/02
- [PULL 18/30] mips: fix memory leaks in board initialization, Paolo Bonzini, 2019/10/02
- [PULL 20/30] lm32: do not leak memory on object_new/object_unref, Paolo Bonzini, 2019/10/02
- [PULL 21/30] docker: test-debug: disable LeakSanitizer, Paolo Bonzini, 2019/10/02
- [PULL 19/30] cris: do not leak struct cris_disasm_data, Paolo Bonzini, 2019/10/02
- [PULL 22/30] i386: Add CPUID bit for CLZERO and XSAVEERPTR, Paolo Bonzini, 2019/10/02
- [PULL 23/30] vfio: Turn the container error into an Error handle, Paolo Bonzini, 2019/10/02
- [PULL 25/30] Fix wrong behavior of cpu_memory_rw_debug() function in SMM,
Paolo Bonzini <=
- [PULL 26/30] util: WSAEWOULDBLOCK on connect should map to EINPROGRESS, Paolo Bonzini, 2019/10/02
- [PULL 24/30] memory: allow memory_region_register_iommu_notifier() to fail, Paolo Bonzini, 2019/10/02
- [PULL 28/30] win32: work around main-loop busy loop on socket/fd event, Paolo Bonzini, 2019/10/02
- [PULL 29/30] tests/docker: only enable ubsan for test-clang, Paolo Bonzini, 2019/10/02
- [PULL 30/30] accel/kvm: ensure ret always set, Paolo Bonzini, 2019/10/02
- [PULL 27/30] tests: skip serial test on windows, Paolo Bonzini, 2019/10/02
- Re: [PULL 00/30] Misc patches for 2010-10-02, no-reply, 2019/10/02
- [PULL 00/30] Misc patches for 2010-10-02, Paolo Bonzini, 2019/10/03