From: Emilio G. Cota Date: Tue, 10 Apr 2018 14:47:41 +0000 (-0400) Subject: target/tilegx: avoid integer overflow in next_page PC check X-Git-Tag: v3.0.0-rc0~165^2~22 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5c433a7aac1a34c199ed5a7a07f4f71349562a8f;p=thirdparty%2Fqemu.git target/tilegx: avoid integer overflow in next_page PC check If the PC is in the last page of the address space, next_page_start overflows to 0. Fix it. Reviewed-by: Richard Henderson Signed-off-by: Emilio G. Cota Signed-off-by: Richard Henderson --- diff --git a/target/tilegx/translate.c b/target/tilegx/translate.c index d63bf5bba39..6c53c5e7671 100644 --- a/target/tilegx/translate.c +++ b/target/tilegx/translate.c @@ -2375,7 +2375,7 @@ void gen_intermediate_code(CPUState *cs, struct TranslationBlock *tb) DisasContext ctx; DisasContext *dc = &ctx; uint64_t pc_start = tb->pc; - uint64_t next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; + uint64_t page_start = pc_start & TARGET_PAGE_MASK; int num_insns = 0; int max_insns = tb_cflags(tb) & CF_COUNT_MASK; @@ -2415,7 +2415,7 @@ void gen_intermediate_code(CPUState *cs, struct TranslationBlock *tb) } dc->pc += TILEGX_BUNDLE_SIZE_IN_BYTES; if (num_insns >= max_insns - || dc->pc >= next_page_start + || (dc->pc - page_start >= TARGET_PAGE_SIZE) || tcg_op_buf_full()) { /* Ending the TB due to TB size or page boundary. Set PC. */ tcg_gen_movi_tl(cpu_pc, dc->pc);