unicorn/qemu
Luc Michel 1ae9d988c6
target/arm: fix smc incorrectly trapping to EL3 when secure is off
This commit fixes a case where the CPU would try to go to EL3 when
executing an smc instruction, even though ARM_FEATURE_EL3 is false. This
case is raised when the PSCI conduit is set to smc, but the smc
instruction does not lead to a valid PSCI call.

QEMU crashes with an assertion failure latter on because of incoherent
mmu_idx.

This commit refactors the pre_smc helper by enumerating all the possible
way of handling an scm instruction, and covering the previously missing
case leading to the crash.

The following minimal test would crash before this commit:

.global _start
.text
_start:
ldr x0, =0xdeadbeef ; invalid PSCI call
smc #0

run with the following command line:

aarch64-linux-gnu-gcc -nostdinc -nostdlib -Wl,-Ttext=40000000 \
-o test test.s

qemu-system-aarch64 -M virt,virtualization=on,secure=off \
-cpu cortex-a57 -kernel test

Backports commit 7760da729ac88f112f98f36395ac3b55fc9e4211 from qemu
2018-11-23 18:57:23 -05:00
..
accel tcg: Support MMU protection regions smaller than TARGET_PAGE_SIZE 2018-11-16 21:35:54 -05:00
crypto
default-configs
docs docs/devel/memory.txt: Document _with_attrs accessors 2018-10-04 04:46:26 -04:00
fpu softfloat: Don't execute divdeu without power7 2018-11-11 08:33:46 -05:00
hw hw/mips/mips_r4k: Fix initialization of MIPS target CPUs 2018-09-03 17:40:08 -04:00
include tcg: Support MMU protection regions smaller than TARGET_PAGE_SIZE 2018-11-16 21:35:54 -05:00
qapi qobject: Modify qobject_ref() to return obj 2018-05-04 10:24:10 -04:00
qobject qstring: Move qstring_from_substr()'s @end one to the right 2018-08-02 21:24:19 -04:00
qom tcg: access cpu->icount_decr.u16.high with atomics 2018-10-23 14:36:46 -04:00
scripts decodetree: Allow multiple input files 2018-11-11 08:28:55 -05:00
target target/arm: fix smc incorrectly trapping to EL3 when secure is off 2018-11-23 18:57:23 -05:00
tcg tcg/tcg-op.h: Add multiple include guard 2018-11-11 08:51:51 -05:00
util Haiku support patches (#989) 2018-09-03 07:55:51 -04:00
aarch64.h target/arm: Correctly implement handling of HCR_EL2.{VI, VF} 2018-11-16 21:53:53 -05:00
aarch64eb.h target/arm: Correctly implement handling of HCR_EL2.{VI, VF} 2018-11-16 21:53:53 -05:00
accel.c
arm.h target/arm: Correctly implement handling of HCR_EL2.{VI, VF} 2018-11-16 21:53:53 -05:00
armeb.h target/arm: Correctly implement handling of HCR_EL2.{VI, VF} 2018-11-16 21:53:53 -05:00
CODING_STYLE
configure tcg: Split CONFIG_ATOMIC128 2018-10-23 15:17:39 -04:00
COPYING
COPYING.LIB
cpus.c
exec.c Partial backport of: exec.c: Handle IOMMUs in address_space_translate_for_iotlb() 2018-11-16 21:24:55 -05:00
gen_all_header.sh
glib_compat.c Use cpu_create(type) instead of cpu_init(cpu_model) 2018-03-20 14:20:30 -04:00
HACKING HACKING: document preference for g_new instead of g_malloc 2018-05-22 00:30:50 -04:00
header_gen.py target/arm: Correctly implement handling of HCR_EL2.{VI, VF} 2018-11-16 21:53:53 -05:00
ioport.c
LICENSE
m68k.h target/arm: Correctly implement handling of HCR_EL2.{VI, VF} 2018-11-16 21:53:53 -05:00
Makefile Revert "Makefile: Rename TARGET_DIRS to TARGET_LIST" 2018-07-05 17:40:24 -04:00
Makefile.objs qapi: Move qapi-schema.json to qapi/, rename generated files 2018-03-09 11:35:11 -05:00
Makefile.target tcg: remove softfloat from --disable-tcg builds 2018-06-07 11:49:35 -04:00
memory_ldst.inc.c exec: Fix MAP_RAM for cached access 2018-07-03 01:11:12 -04:00
memory_mapping.c
memory.c memory: learn about non-volatile memory region 2018-11-11 08:50:39 -05:00
mips64.h target/arm: Correctly implement handling of HCR_EL2.{VI, VF} 2018-11-16 21:53:53 -05:00
mips64el.h target/arm: Correctly implement handling of HCR_EL2.{VI, VF} 2018-11-16 21:53:53 -05:00
mips.h target/arm: Correctly implement handling of HCR_EL2.{VI, VF} 2018-11-16 21:53:53 -05:00
mipsel.h target/arm: Correctly implement handling of HCR_EL2.{VI, VF} 2018-11-16 21:53:53 -05:00
powerpc.h target/arm: Correctly implement handling of HCR_EL2.{VI, VF} 2018-11-16 21:53:53 -05:00
qemu-timer.c
riscv32.h target/arm: Add v8M stack checks on ADD/SUB/MOV of SP 2018-10-08 14:15:15 -04:00
riscv64.h target/arm: Add v8M stack checks on ADD/SUB/MOV of SP 2018-10-08 14:15:15 -04:00
rules.mak
sparc64.h target/arm: Correctly implement handling of HCR_EL2.{VI, VF} 2018-11-16 21:53:53 -05:00
sparc.h target/arm: Correctly implement handling of HCR_EL2.{VI, VF} 2018-11-16 21:53:53 -05:00
unicorn_common.h unicorn_common: Fix unicorn memory functions failing 2018-09-03 10:40:14 -04:00
VERSION Update version for v3.1.0-rc1 release 2018-11-16 22:00:34 -05:00
vl.c Use cpu_create(type) instead of cpu_init(cpu_model) 2018-03-20 14:20:30 -04:00
vl.h
x86_64.h target/arm: Correctly implement handling of HCR_EL2.{VI, VF} 2018-11-16 21:53:53 -05:00