From 1f899ce059ce13d0cf1602f1aa797236855608d4 Mon Sep 17 00:00:00 2001 From: HeatCrab Date: Thu, 29 Jan 2026 21:40:07 +0800 Subject: [PATCH] Simplify U-mode validation test output format The previous test output used phase-based grouping and hierarchical numbering which was inconsistent with other test apps in the codebase. This change aligns with the sequential numbering convention used elsewhere and improves readability with descriptive progress messages. --- app/umode.c | 58 +++++++++++++++++++---------------------------------- 1 file changed, 21 insertions(+), 37 deletions(-) diff --git a/app/umode.c b/app/umode.c index 6d0a0e2..82be2bb 100644 --- a/app/umode.c +++ b/app/umode.c @@ -12,72 +12,56 @@ extern uint32_t __switch_sp(uint32_t new_sp); */ void umode_validation_task(void) { - /* --- Phase 1: Kernel Stack Isolation Test --- */ - umode_printf("Phase 1: Testing Kernel Stack Isolation\n"); - umode_printf("\n"); - - /* Test 1-1: Baseline - Syscall with normal SP */ - umode_printf("Test 1-1: sys_tid() with normal SP\n"); + /* Test 1: Basic syscall */ + umode_printf("Test 1: Basic syscall\n"); + umode_printf("Calling sys_tid()...\n"); int my_tid = sys_tid(); if (my_tid > 0) { - umode_printf("PASS: sys_tid() returned %d\n", my_tid); + umode_printf("[PASS] returned tid=%d\n", my_tid); } else { - umode_printf("FAIL: sys_tid() failed (ret=%d)\n", my_tid); + umode_printf("[FAIL] returned tid=%d\n", my_tid); } umode_printf("\n"); - /* Test 1-2: Verify ISR uses mscratch, not malicious user SP */ - umode_printf("Test 1-2: sys_tid() with malicious SP\n"); + /* Test 2: Syscall with corrupted SP */ + umode_printf("Test 2: Syscall with corrupted SP\n"); + umode_printf("Setting SP to 0xDEADBEEF...\n"); uint32_t saved_sp = __switch_sp(0xDEADBEEF); int my_tid_bad_sp = sys_tid(); __switch_sp(saved_sp); if (my_tid_bad_sp > 0) { - umode_printf( - "PASS: sys_tid() succeeded, ISR correctly used kernel " - "stack\n"); + umode_printf("[PASS] kernel stack isolation working\n"); } else { - umode_printf("FAIL: Syscall failed with malicious SP (ret=%d)\n", - my_tid_bad_sp); + umode_printf("[FAIL] syscall failed (ret=%d)\n", my_tid_bad_sp); } umode_printf("\n"); - /* Test 1-3: Verify syscall functionality is still intact */ - umode_printf("Test 1-3: sys_uptime() with normal SP\n"); + /* Test 3: Syscall after recovery */ + umode_printf("Test 3: Syscall after recovery\n"); + umode_printf("Calling sys_uptime()...\n"); int uptime = sys_uptime(); if (uptime >= 0) { - umode_printf("PASS: sys_uptime() returned %d\n", uptime); + umode_printf("[PASS] returned uptime=%d\n", uptime); } else { - umode_printf("FAIL: sys_uptime() failed (ret=%d)\n", uptime); + umode_printf("[FAIL] returned uptime=%d\n", uptime); } umode_printf("\n"); - umode_printf("Phase 1 All tests passed.\n"); - umode_printf("\n"); - - /* --- Phase 2: Security Check (Privileged Access) --- */ - umode_printf("========================================\n"); - umode_printf("\n"); - umode_printf("Phase 2: Testing Security Isolation\n"); - umode_printf("\n"); - umode_printf("Action: Attempting to read 'mstatus' CSR from U-mode.\n"); - umode_printf("Expect: Kernel Panic with 'Illegal instruction'.\n"); - umode_printf("\n"); - /* Delay before suicide to ensure logs are flushed from - * buffer to UART. + /* Test 4: Privileged CSR access + * Delay before triggering exception to ensure logs are flushed. */ + umode_printf("Test 4: Privileged CSR access\n"); sys_tdelay(10); - /* Privileged Instruction Trigger */ + umode_printf("Reading mstatus from U-mode...\n"); umode_printf("Result: \n"); uint32_t mstatus; asm volatile("csrr %0, mstatus" : "=r"(mstatus)); - /* If execution reaches here, U-mode isolation failed (still has - * privileges). - */ - umode_printf("FAIL: Privileged instruction executed! (mstatus=0x%lx)\n", + /* If execution reaches here, U-mode isolation failed */ + umode_printf("[FAIL] privileged instruction executed (mstatus=0x%lx)\n", (long) mstatus); /* Spin loop to prevent further execution. */