Re: [Qemu-devel] [PATCH 01/10] target/riscv: avoid integer overflow in next_page PC check
On Wed, Apr 11, 2018 at 4:19 AM, Emilio G. Cotawrote: > If the PC is in the last page of the address space, next_page_start > overflows to 0. Fix it. > > Reported-by: Richard Henderson > Suggested-by: Richard Henderson > Cc: Michael Clark > Cc: Palmer Dabbelt > Cc: Sagar Karandikar > Cc: Bastian Koppelmann > Signed-off-by: Emilio G. Cota > Reviewed-by: Michael Clark > --- > target/riscv/translate.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/target/riscv/translate.c b/target/riscv/translate.c > index 808eab7..d2d2e5e 100644 > --- a/target/riscv/translate.c > +++ b/target/riscv/translate.c > @@ -1849,11 +1849,11 @@ void gen_intermediate_code(CPUState *cs, > TranslationBlock *tb) > CPURISCVState *env = cs->env_ptr; > DisasContext ctx; > target_ulong pc_start; > -target_ulong next_page_start; > +target_ulong page_start; > int num_insns; > int max_insns; > pc_start = tb->pc; > -next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; > +page_start = pc_start & TARGET_PAGE_MASK; > ctx.pc = pc_start; > > /* once we have GDB, the rest of the translate.c implementation > should be > @@ -1903,7 +1903,7 @@ void gen_intermediate_code(CPUState *cs, > TranslationBlock *tb) > if (cs->singlestep_enabled) { > break; > } > -if (ctx.pc >= next_page_start) { > +if (ctx.pc - page_start >= TARGET_PAGE_SIZE) { > break; > } > if (tcg_op_buf_full()) { > -- > 2.7.4 > >
Re: [Qemu-devel] [PATCH 01/10] target/riscv: avoid integer overflow in next_page PC check
On 04/10/2018 06:19 PM, Emilio G. Cota wrote: > If the PC is in the last page of the address space, next_page_start > overflows to 0. Fix it. > > Reported-by: Richard Henderson> Suggested-by: Richard Henderson > Cc: Michael Clark > Cc: Palmer Dabbelt > Cc: Sagar Karandikar > Cc: Bastian Koppelmann > Signed-off-by: Emilio G. Cota > --- Acked-by: Bastian Koppelmann Cheers, Bastian
[Qemu-devel] [PATCH 01/10] target/riscv: 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. Reported-by: Richard HendersonSuggested-by: Richard Henderson Cc: Michael Clark Cc: Palmer Dabbelt Cc: Sagar Karandikar Cc: Bastian Koppelmann Signed-off-by: Emilio G. Cota --- target/riscv/translate.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 808eab7..d2d2e5e 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -1849,11 +1849,11 @@ void gen_intermediate_code(CPUState *cs, TranslationBlock *tb) CPURISCVState *env = cs->env_ptr; DisasContext ctx; target_ulong pc_start; -target_ulong next_page_start; +target_ulong page_start; int num_insns; int max_insns; pc_start = tb->pc; -next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; +page_start = pc_start & TARGET_PAGE_MASK; ctx.pc = pc_start; /* once we have GDB, the rest of the translate.c implementation should be @@ -1903,7 +1903,7 @@ void gen_intermediate_code(CPUState *cs, TranslationBlock *tb) if (cs->singlestep_enabled) { break; } -if (ctx.pc >= next_page_start) { +if (ctx.pc - page_start >= TARGET_PAGE_SIZE) { break; } if (tcg_op_buf_full()) { -- 2.7.4