On 08/06/2023 09.58, Nicholas Piggin wrote:
Check to ensure exception handlers are not being overwritten or
invalid exception numbers are used.
Signed-off-by: Nicholas Piggin <npiggin@xxxxxxxxx>
---
Since v3:
- Simplified code as suggested by Thomas.
lib/powerpc/processor.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/lib/powerpc/processor.c b/lib/powerpc/processor.c
index 05b4b04f..0550e4fc 100644
--- a/lib/powerpc/processor.c
+++ b/lib/powerpc/processor.c
@@ -19,12 +19,16 @@ static struct {
void handle_exception(int trap, void (*func)(struct pt_regs *, void *),
void * data)
{
+ assert(!(trap & ~0xf00));
+
trap >>= 8;
- if (trap < 16) {
- handlers[trap].func = func;
- handlers[trap].data = data;
+ if (func && handlers[trap].func) {
+ printf("exception handler installed twice %#x\n", trap);
+ abort();
}
+ handlers[trap].func = func;
+ handlers[trap].data = data;
}
void do_handle_exception(struct pt_regs *regs)
Reviewed-by: Thomas Huth <thuth@xxxxxxxxxx>