From: David Gibson Date: Tue, 12 Mar 2013 00:31:37 +0000 (+0000) Subject: mmu-hash32: Don't look up page tables on BAT permission error X-Git-Tag: v1.5.0-rc0~442^2~18 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=59acbe28552eb7bd7be75b22b3f3de93d7d40556;p=thirdparty%2Fqemu.git mmu-hash32: Don't look up page tables on BAT permission error BEHAVIOUR CHANGE Currently, on any failure translating an address with BATs, we proceed to normal segment and page table translation. That's incorrect if the BAT error was due to permissions, rather than not finding a matching BAT. We've gotten away with it because a guest would not usually put translations for the same address in both BATs and page table. Nonetheless this patch corrects the logic, only doing page table lookup if no BAT is found. A matching BAT with bad permissions will now correctly trigger an exception. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- diff --git a/target-ppc/mmu-hash32.c b/target-ppc/mmu-hash32.c index d4d91dd6e26..348809244db 100644 --- a/target-ppc/mmu-hash32.c +++ b/target-ppc/mmu-hash32.c @@ -400,10 +400,7 @@ static int ppc_hash32_translate(CPUPPCState *env, struct mmu_ctx_hash32 *ctx, if (env->nb_BATs != 0) { ctx->raddr = ppc_hash32_bat_lookup(env, eaddr, rwx, &ctx->prot); if (ctx->raddr != -1) { - ret = ppc_hash32_check_prot(ctx->prot, rwx); - if (ret == 0) { - return 0; - } + return ppc_hash32_check_prot(ctx->prot, rwx); } }