RISC-V: Fix a PMP bug where it succeeds even if PMP entry is off
commitf8162068f18f2f264a0355938784f54089234211
authorHesham Almatary <Hesham.Almatary@cl.cam.ac.uk>
Thu, 30 May 2019 13:51:34 +0000 (30 14:51 +0100)
committerPalmer Dabbelt <palmer@sifive.com>
Mon, 24 Jun 2019 06:44:42 +0000 (23 23:44 -0700)
treefea319920a4f27af65a6d64ab573e74fdcc1a7d5
parent1f447aec787bfbbd078afccae44fc4c92acb4fed
RISC-V: Fix a PMP bug where it succeeds even if PMP entry is off

The current implementation returns 1 (PMP check success) if the address is in
range even if the PMP entry is off. This is a bug.

For example, if there is a PMP check in S-Mode which is in range, but its PMP
entry is off, this will succeed, which it should not.

The patch fixes this bug by only checking the PMP permissions if the address is
in range and its corresponding PMP entry it not off. Otherwise, it will keep
the ret = -1 which will be checked and handled correctly at the end of the
function.

Signed-off-by: Hesham Almatary <Hesham.Almatary@cl.cam.ac.uk>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
target/riscv/pmp.c