aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Davidsaver <mdavidsaver@gmail.com>2015-12-02 19:18:41 -0500
committerPeter Maydell <peter.maydell@linaro.org>2017-01-23 13:33:40 +0000
commit1a28e35aede1fc2a0668b6d9f7df5734369f35d9 (patch)
treeb54bcdb3ab8a018543669b3f7ec410d689fb397a
parenta67a5bb5c63479c1596459a122059a9ff9edaf98 (diff)
armv7m: prevent unprivileged write to STIR
Prevent unprivileged from writing to the Software Triggered Interrupt register Signed-off-by: Michael Davidsaver <mdavidsaver@gmail.com>
-rw-r--r--hw/intc/armv7m_nvic.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/hw/intc/armv7m_nvic.c b/hw/intc/armv7m_nvic.c
index 782afadba0..8dddebb93b 100644
--- a/hw/intc/armv7m_nvic.c
+++ b/hw/intc/armv7m_nvic.c
@@ -732,7 +732,9 @@ static void nvic_writel(NVICState *s, uint32_t offset, uint32_t value)
"NVIC: Aux fault status registers unimplemented\n");
break;
case 0xf00: /* Software Triggered Interrupt Register */
- if ((value & 0x1ff) < NVIC_MAX_IRQ) {
+ /* STIR write allowed if privlaged or USERSETMPEND set */
+ if ((arm_current_el(&cpu->env) || (cpu->env.v7m.ccr & 2))
+ && ((value & 0x1ff) < NVIC_MAX_IRQ)) {
armv7m_nvic_set_pending(s, (value&0x1ff)+16);
}
break;