From: Juha Riihimäki Date: Wed, 8 Dec 2010 11:15:16 +0000 (+0200) Subject: target-arm: fix vmsav6 access control X-Git-Tag: TizenStudio_2.0_p2.3~3741 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9b4ddddfe7b280e20ceba01220ce08c483deac08;p=sdk%2Femulator%2Fqemu.git target-arm: fix vmsav6 access control Override access control checks (including execute) for mmu translation table descriptors assigned to manager domains. Signed-off-by: Juha Riihimäki Signed-off-by: Aurelien Jarno --- diff --git a/target-arm/helper.c b/target-arm/helper.c index 9ba2f4f..409a6c0 100644 --- a/target-arm/helper.c +++ b/target-arm/helper.c @@ -1084,22 +1084,26 @@ static int get_phys_addr_v6(CPUState *env, uint32_t address, int access_type, } code = 15; } - if (xn && access_type == 2) - goto do_fault; + if (domain == 3) { + *prot = PAGE_READ | PAGE_WRITE | PAGE_EXEC; + } else { + if (xn && access_type == 2) + goto do_fault; - /* The simplified model uses AP[0] as an access control bit. */ - if ((env->cp15.c1_sys & (1 << 29)) && (ap & 1) == 0) { - /* Access flag fault. */ - code = (code == 15) ? 6 : 3; - goto do_fault; - } - *prot = check_ap(env, ap, domain, access_type, is_user); - if (!*prot) { - /* Access permission fault. */ - goto do_fault; - } - if (!xn) { - *prot |= PAGE_EXEC; + /* The simplified model uses AP[0] as an access control bit. */ + if ((env->cp15.c1_sys & (1 << 29)) && (ap & 1) == 0) { + /* Access flag fault. */ + code = (code == 15) ? 6 : 3; + goto do_fault; + } + *prot = check_ap(env, ap, domain, access_type, is_user); + if (!*prot) { + /* Access permission fault. */ + goto do_fault; + } + if (!xn) { + *prot |= PAGE_EXEC; + } } *phys_ptr = phys_addr; return 0;