From: Richard Henderson Date: Wed, 28 Jan 2026 01:04:30 +0000 (+1100) Subject: accel/tcg: Fix uninitialized hostp in get_page_addr_code_hostp X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0039e5fd22344fec664c980d7a27443568834264;p=thirdparty%2Fqemu.git accel/tcg: Fix uninitialized hostp in get_page_addr_code_hostp This uninitialized value violates the contract in the documentation comment, and may lead to a SEGV during translaton with -d in_asm. Change the documentation to disallow hostp NULL. Pass hostp to probe_access_internal directly. Reported-by: Panda Jiang <3160104094@zju.edu.cn> Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Richard Henderson --- diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c index 76546c6651..3d75abbe68 100644 --- a/accel/tcg/cputlb.c +++ b/accel/tcg/cputlb.c @@ -1545,18 +1545,18 @@ tb_page_addr_t get_page_addr_code_hostp(CPUArchState *env, vaddr addr, (void)probe_access_internal(env_cpu(env), addr, 1, MMU_INST_FETCH, cpu_mmu_index(env_cpu(env), true), false, - &p, &full, 0, false); + hostp, &full, 0, false); + + p = *hostp; if (p == NULL) { return -1; } if (full->lg_page_size < TARGET_PAGE_BITS) { + *hostp = NULL; return -1; } - if (hostp) { - *hostp = p; - } return qemu_ram_addr_from_host_nofail(p); } diff --git a/accel/tcg/internal-common.h b/accel/tcg/internal-common.h index 0ca13750f9..9e7be2d78d 100644 --- a/accel/tcg/internal-common.h +++ b/accel/tcg/internal-common.h @@ -82,7 +82,7 @@ void tb_check_watchpoint(CPUState *cpu, uintptr_t retaddr); * See get_page_addr_code() (full-system version) for documentation on the * return value. * - * Sets *@hostp (when @hostp is non-NULL) as follows. + * Sets *@hostp as follows. * If the return value is -1, sets *@hostp to NULL. Otherwise, sets *@hostp * to the host address where @addr's content is kept. * diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c index ddbdc0432d..f8b4a26711 100644 --- a/accel/tcg/user-exec.c +++ b/accel/tcg/user-exec.c @@ -822,9 +822,7 @@ tb_page_addr_t get_page_addr_code_hostp(CPUArchState *env, vaddr addr, flags = probe_access_internal(env, addr, 1, MMU_INST_FETCH, false, 0); g_assert(flags == 0); - if (hostp) { - *hostp = g2h_untagged(addr); - } + *hostp = g2h_untagged(addr); return addr; }