From ecac401006f532755967e6c7171060a0c38b23e3 Mon Sep 17 00:00:00 2001 From: Mark Bundschuh Date: Thu, 20 Feb 2025 16:22:58 -0500 Subject: [PATCH 01/10] fix mpu --- decoder/src/hardware.zig | 12 +++--------- decoder/src/main.zig | 3 ++- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/decoder/src/hardware.zig b/decoder/src/hardware.zig index f6e5c96..832c961 100644 --- a/decoder/src/hardware.zig +++ b/decoder/src/hardware.zig @@ -10,19 +10,13 @@ pub fn mpu() void { msdk.ARM_MPU_SetRegion( msdk.ARM_MPU_RBAR(0, 0x1000_0000), // to 0x1008_0000 (512KiB) // Allow execution, read-only - msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_RO, msdk.ARM_MPU_ACCESS_ORDERED, 1, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_512KB), + msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_RO, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_512KB), ); msdk.ARM_MPU_Enable(msdk.MPU_CTRL_HFNMIENA_Msk | msdk.MPU_CTRL_PRIVDEFENA_Msk); msdk.ARM_MPU_SetRegion( - msdk.ARM_MPU_RBAR(2, 0x2000_0000), + msdk.ARM_MPU_RBAR(1, 0x2000_0000), // to 0x2002_0000 (128KB) // No-execute, read-write - msdk.ARM_MPU_RASR(1, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 1, 0, 0, 0b00000001, msdk.ARM_MPU_REGION_SIZE_16KB), - ); - msdk.ARM_MPU_Enable(msdk.MPU_CTRL_HFNMIENA_Msk | msdk.MPU_CTRL_PRIVDEFENA_Msk); - msdk.ARM_MPU_SetRegion( - msdk.ARM_MPU_RBAR(3, 0x2000_0000), // to 0x2002_0000 (128KB) - // No-execute, read-write - msdk.ARM_MPU_RASR(1, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 1, 0, 0, 0b00000001, msdk.ARM_MPU_REGION_SIZE_128KB), + msdk.ARM_MPU_RASR(1, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_128KB), ); msdk.ARM_MPU_Enable(msdk.MPU_CTRL_HFNMIENA_Msk | msdk.MPU_CTRL_PRIVDEFENA_Msk); } diff --git a/decoder/src/main.zig b/decoder/src/main.zig index 775bfce..cedf316 100644 --- a/decoder/src/main.zig +++ b/decoder/src/main.zig @@ -63,6 +63,8 @@ fn run() !void { try uart.init(); try flash.init(); + hardware.mpu(); + // Turn on the green LED to indicate we are successfully processing msdk.LED_On(msdk.LED2); @@ -134,7 +136,6 @@ fn readBody(length: u16) ![]u8 { /// Entrypoint for the decoder export fn main() callconv(.C) noreturn { - hardware.mpu(); hardware.disable(); _ = msdk.LED_Init(); From 009187253bb4c764b3160a18d4d4e2e42b98002a Mon Sep 17 00:00:00 2001 From: Mark Bundschuh Date: Thu, 20 Feb 2025 18:50:23 -0500 Subject: [PATCH 02/10] stuff --- decoder/src/hardware.zig | 39 +++++++++++++++++++++++++++------------ decoder/src/main.zig | 3 +++ 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/decoder/src/hardware.zig b/decoder/src/hardware.zig index 832c961..c0957cb 100644 --- a/decoder/src/hardware.zig +++ b/decoder/src/hardware.zig @@ -1,24 +1,39 @@ //! Interact with the hardware security features of the MAX78000 +const std = @import("std"); const msdk = @import("msdk"); +const regions = [_]msdk.ARM_MPU_Region_t{ + .{ + .RBAR = msdk.ARM_MPU_RBAR(0, 0x1000_0000), + .RASR = msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_RO, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_512KB), + }, + // .{ + // .RBAR = msdk.ARM_MPU_RBAR(1, 0x1006_0000), + // .RASR = msdk.ARM_MPU_RASR(1, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_128KB), + // }, + .{ + .RBAR = msdk.ARM_MPU_RBAR(1, 0x2000_4000), + .RASR = msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_RO, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_16KB), + }, + .{ + .RBAR = msdk.ARM_MPU_RBAR(2, 0x2000_0000), + .RASR = msdk.ARM_MPU_RASR(1, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_128KB), + }, + .{ + .RBAR = msdk.ARM_MPU_RBAR(3, 0x4000_0000), + .RASR = msdk.ARM_MPU_RASR(1, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_512MB), + }, +}; + /// Enable the Memory Protection Unit (MPU) over regions to make the code RX and /// the RAM RW pub fn mpu() void { msdk.ARM_MPU_Disable(); - msdk.ARM_MPU_SetRegion( - msdk.ARM_MPU_RBAR(0, 0x1000_0000), // to 0x1008_0000 (512KiB) - // Allow execution, read-only - msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_RO, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_512KB), - ); - msdk.ARM_MPU_Enable(msdk.MPU_CTRL_HFNMIENA_Msk | msdk.MPU_CTRL_PRIVDEFENA_Msk); - msdk.ARM_MPU_SetRegion( - msdk.ARM_MPU_RBAR(1, 0x2000_0000), // to 0x2002_0000 (128KB) - // No-execute, read-write - msdk.ARM_MPU_RASR(1, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_128KB), - ); - msdk.ARM_MPU_Enable(msdk.MPU_CTRL_HFNMIENA_Msk | msdk.MPU_CTRL_PRIVDEFENA_Msk); + @memcpy(@as([*]u8, @ptrCast(&msdk.MPU.*.RBAR))[0..32], std.mem.asBytes(®ions)); + + msdk.ARM_MPU_Enable(0); } /// Disable all peripherals diff --git a/decoder/src/main.zig b/decoder/src/main.zig index cedf316..b277b23 100644 --- a/decoder/src/main.zig +++ b/decoder/src/main.zig @@ -65,6 +65,9 @@ fn run() !void { hardware.mpu(); + // const thanos: *u64 = @ptrFromInt(0x10000000 + 32); + // thanos.* = 5; + // Turn on the green LED to indicate we are successfully processing msdk.LED_On(msdk.LED2); From b5da66bac6d3a8449c714806b6e1ad592f748a32 Mon Sep 17 00:00:00 2001 From: Christopher McDevitt Date: Tue, 25 Feb 2025 15:03:07 -0500 Subject: [PATCH 03/10] MPU protect public key --- decoder/src/hardware.zig | 7 +++++-- decoder/src/main.zig | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/decoder/src/hardware.zig b/decoder/src/hardware.zig index c0957cb..a6a5fd6 100644 --- a/decoder/src/hardware.zig +++ b/decoder/src/hardware.zig @@ -2,6 +2,7 @@ const std = @import("std"); const msdk = @import("msdk"); +const secrets = @import("secrets"); const regions = [_]msdk.ARM_MPU_Region_t{ .{ @@ -31,9 +32,11 @@ const regions = [_]msdk.ARM_MPU_Region_t{ pub fn mpu() void { msdk.ARM_MPU_Disable(); - @memcpy(@as([*]u8, @ptrCast(&msdk.MPU.*.RBAR))[0..32], std.mem.asBytes(®ions)); + // @memcpy(@as([*]u8, @ptrCast(&msdk.MPU.*.RBAR))[0..32], std.mem.asBytes(®ions)); - msdk.ARM_MPU_Enable(0); + msdk.ARM_MPU_SetRegion(msdk.ARM_MPU_RBAR(0, @intFromPtr(&secrets.public_key)), msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_RO, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b11111100, msdk.ARM_MPU_REGION_SIZE_128B)); + + msdk.ARM_MPU_Enable(msdk.MPU_CTRL_HFNMIENA_Msk | msdk.MPU_CTRL_PRIVDEFENA_Msk); } /// Disable all peripherals diff --git a/decoder/src/main.zig b/decoder/src/main.zig index b277b23..64844a3 100644 --- a/decoder/src/main.zig +++ b/decoder/src/main.zig @@ -65,8 +65,9 @@ fn run() !void { hardware.mpu(); - // const thanos: *u64 = @ptrFromInt(0x10000000 + 32); + // const thanos: *u8 = @ptrCast(@constCast(&secrets.public_key)); // thanos.* = 5; + // messaging.sendDebug("public key: {any}", .{secrets.public_key}); // Turn on the green LED to indicate we are successfully processing msdk.LED_On(msdk.LED2); From 7b7dec303aeec462e6c930d4dd708c5b94cfc100 Mon Sep 17 00:00:00 2001 From: Christopher McDevitt Date: Tue, 25 Feb 2025 17:30:43 -0500 Subject: [PATCH 04/10] MPU protect SRAM --- decoder/src/hardware.zig | 3 +++ decoder/src/main.zig | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/decoder/src/hardware.zig b/decoder/src/hardware.zig index a6a5fd6..2d4b858 100644 --- a/decoder/src/hardware.zig +++ b/decoder/src/hardware.zig @@ -36,6 +36,9 @@ pub fn mpu() void { msdk.ARM_MPU_SetRegion(msdk.ARM_MPU_RBAR(0, @intFromPtr(&secrets.public_key)), msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_RO, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b11111100, msdk.ARM_MPU_REGION_SIZE_128B)); + msdk.ARM_MPU_SetRegion(msdk.ARM_MPU_RBAR(1, 0x20000000), msdk.ARM_MPU_RASR(1, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_128KB)); + msdk.ARM_MPU_SetRegion(msdk.ARM_MPU_RBAR(2, 0x20000000), msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_32B)); + msdk.ARM_MPU_Enable(msdk.MPU_CTRL_HFNMIENA_Msk | msdk.MPU_CTRL_PRIVDEFENA_Msk); } diff --git a/decoder/src/main.zig b/decoder/src/main.zig index 64844a3..db0ad16 100644 --- a/decoder/src/main.zig +++ b/decoder/src/main.zig @@ -134,7 +134,6 @@ fn readBody(length: u16) ![]u8 { uart.readBytes(body[i..@min(i + 256, length)]); messaging.sendAck(); } - return body; } From 1aeee8ecb435446f44bf409d2cd0d18acefe81b5 Mon Sep 17 00:00:00 2001 From: Christopher McDevitt Date: Tue, 25 Feb 2025 17:43:27 -0500 Subject: [PATCH 05/10] protect flash --- decoder/src/hardware.zig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/decoder/src/hardware.zig b/decoder/src/hardware.zig index 2d4b858..031cfb1 100644 --- a/decoder/src/hardware.zig +++ b/decoder/src/hardware.zig @@ -39,6 +39,8 @@ pub fn mpu() void { msdk.ARM_MPU_SetRegion(msdk.ARM_MPU_RBAR(1, 0x20000000), msdk.ARM_MPU_RASR(1, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_128KB)); msdk.ARM_MPU_SetRegion(msdk.ARM_MPU_RBAR(2, 0x20000000), msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_32B)); + msdk.ARM_MPU_SetRegion(msdk.ARM_MPU_RBAR(3, 0x10000000), msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_RO, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_256KB)); + msdk.ARM_MPU_Enable(msdk.MPU_CTRL_HFNMIENA_Msk | msdk.MPU_CTRL_PRIVDEFENA_Msk); } From a3e9c6c90ed89966657841c054f45c75525af0c1 Mon Sep 17 00:00:00 2001 From: Christopher McDevitt Date: Tue, 25 Feb 2025 18:06:19 -0500 Subject: [PATCH 06/10] format --- decoder/src/hardware.zig | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/decoder/src/hardware.zig b/decoder/src/hardware.zig index 01905ae..b89e4b8 100644 --- a/decoder/src/hardware.zig +++ b/decoder/src/hardware.zig @@ -34,11 +34,20 @@ pub fn mpu() void { msdk.ARM_MPU_SetRegion(msdk.ARM_MPU_RBAR(0, @intFromPtr(&secrets.public_key)), msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_RO, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b11111100, msdk.ARM_MPU_REGION_SIZE_128B)); - msdk.ARM_MPU_SetRegion(msdk.ARM_MPU_RBAR(1, 0x20000000), msdk.ARM_MPU_RASR(1, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_128KB)); - msdk.ARM_MPU_SetRegion(msdk.ARM_MPU_RBAR(2, 0x20000000), msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_32B)); + msdk.ARM_MPU_SetRegion( + msdk.ARM_MPU_RBAR(1, 0x20000000), + msdk.ARM_MPU_RASR(1, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_128KB), + ); + msdk.ARM_MPU_SetRegion( + msdk.ARM_MPU_RBAR(2, 0x20000000), + msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_32B), + ); + + msdk.ARM_MPU_SetRegion( + msdk.ARM_MPU_RBAR(3, 0x10000000), + msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_RO, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_256KB), + ); - msdk.ARM_MPU_SetRegion(msdk.ARM_MPU_RBAR(3, 0x10000000), msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_RO, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_256KB)); - msdk.ARM_MPU_Enable(msdk.MPU_CTRL_HFNMIENA_Msk | msdk.MPU_CTRL_PRIVDEFENA_Msk); } From e6d05650199ff2e715070a1a8eb37f47ca6d4fb7 Mon Sep 17 00:00:00 2001 From: Christopher McDevitt Date: Wed, 26 Feb 2025 15:12:28 -0500 Subject: [PATCH 07/10] fix --- decoder/src/hardware.zig | 35 ++++++++++------------------------- decoder/src/main.zig | 4 ---- 2 files changed, 10 insertions(+), 29 deletions(-) diff --git a/decoder/src/hardware.zig b/decoder/src/hardware.zig index b89e4b8..6523988 100644 --- a/decoder/src/hardware.zig +++ b/decoder/src/hardware.zig @@ -3,29 +3,7 @@ const std = @import("std"); const msdk = @import("msdk"); const secrets = @import("secrets"); - -const regions = [_]msdk.ARM_MPU_Region_t{ - .{ - .RBAR = msdk.ARM_MPU_RBAR(0, 0x1000_0000), - .RASR = msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_RO, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_512KB), - }, - // .{ - // .RBAR = msdk.ARM_MPU_RBAR(1, 0x1006_0000), - // .RASR = msdk.ARM_MPU_RASR(1, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_128KB), - // }, - .{ - .RBAR = msdk.ARM_MPU_RBAR(1, 0x2000_4000), - .RASR = msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_RO, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_16KB), - }, - .{ - .RBAR = msdk.ARM_MPU_RBAR(2, 0x2000_0000), - .RASR = msdk.ARM_MPU_RASR(1, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_128KB), - }, - .{ - .RBAR = msdk.ARM_MPU_RBAR(3, 0x4000_0000), - .RASR = msdk.ARM_MPU_RASR(1, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_512MB), - }, -}; +const messaging = @import("messaging.zig"); /// Enable the Memory Protection Unit (MPU) over regions to make the code RX and /// the RAM RW @@ -33,16 +11,23 @@ pub fn mpu() void { msdk.ARM_MPU_Disable(); msdk.ARM_MPU_SetRegion(msdk.ARM_MPU_RBAR(0, @intFromPtr(&secrets.public_key)), msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_RO, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b11111100, msdk.ARM_MPU_REGION_SIZE_128B)); + messaging.sendDebug("intFromPtr: 0x{x}", .{@intFromPtr(&secrets.public_key)}); + // make SRAM non-executable msdk.ARM_MPU_SetRegion( msdk.ARM_MPU_RBAR(1, 0x20000000), - msdk.ARM_MPU_RASR(1, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_128KB), + msdk.ARM_MPU_RASR(1, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_1MB), ); + msdk.ARM_MPU_Enable(msdk.MPU_CTRL_HFNMIENA_Msk | msdk.MPU_CTRL_PRIVDEFENA_Msk); + + // except for this region which must be executable msdk.ARM_MPU_SetRegion( msdk.ARM_MPU_RBAR(2, 0x20000000), - msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_32B), + msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b10000000, msdk.ARM_MPU_REGION_SIZE_4KB), ); + msdk.ARM_MPU_Enable(msdk.MPU_CTRL_HFNMIENA_Msk | msdk.MPU_CTRL_PRIVDEFENA_Msk); + // Make FLASH read only msdk.ARM_MPU_SetRegion( msdk.ARM_MPU_RBAR(3, 0x10000000), msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_RO, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_256KB), diff --git a/decoder/src/main.zig b/decoder/src/main.zig index 73d4d64..8cbd16c 100644 --- a/decoder/src/main.zig +++ b/decoder/src/main.zig @@ -63,10 +63,6 @@ fn run() !void { hardware.mpu(); - // const thanos: *u8 = @ptrCast(@constCast(&secrets.public_key)); - // thanos.* = 5; - // messaging.sendDebug("public key: {any}", .{secrets.public_key}); - // Turn on the green LED to indicate we are successfully processing msdk.LED_On(msdk.LED2); From d1a970c669281db51bf1edfe9fc7bada744a4d87 Mon Sep 17 00:00:00 2001 From: Christopher McDevitt Date: Wed, 26 Feb 2025 15:18:31 -0500 Subject: [PATCH 08/10] cleanup --- decoder/src/hardware.zig | 7 ------- decoder/src/main.zig | 1 + 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/decoder/src/hardware.zig b/decoder/src/hardware.zig index 6523988..764eb88 100644 --- a/decoder/src/hardware.zig +++ b/decoder/src/hardware.zig @@ -1,18 +1,11 @@ //! Interact with the hardware security features of the MAX78000 - -const std = @import("std"); const msdk = @import("msdk"); -const secrets = @import("secrets"); -const messaging = @import("messaging.zig"); /// Enable the Memory Protection Unit (MPU) over regions to make the code RX and /// the RAM RW pub fn mpu() void { msdk.ARM_MPU_Disable(); - msdk.ARM_MPU_SetRegion(msdk.ARM_MPU_RBAR(0, @intFromPtr(&secrets.public_key)), msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_RO, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b11111100, msdk.ARM_MPU_REGION_SIZE_128B)); - messaging.sendDebug("intFromPtr: 0x{x}", .{@intFromPtr(&secrets.public_key)}); - // make SRAM non-executable msdk.ARM_MPU_SetRegion( msdk.ARM_MPU_RBAR(1, 0x20000000), diff --git a/decoder/src/main.zig b/decoder/src/main.zig index 8cbd16c..8d0784f 100644 --- a/decoder/src/main.zig +++ b/decoder/src/main.zig @@ -128,6 +128,7 @@ fn readBody(length: u16) ![]u8 { uart.readBytes(body[i..@min(i + 256, length)]); messaging.sendAck(); } + return body; } From 9c949e44786e7ad23409980fee9c270f854682df Mon Sep 17 00:00:00 2001 From: Christopher McDevitt Date: Wed, 26 Feb 2025 15:19:06 -0500 Subject: [PATCH 09/10] cleanup2 --- decoder/src/hardware.zig | 1 + 1 file changed, 1 insertion(+) diff --git a/decoder/src/hardware.zig b/decoder/src/hardware.zig index 764eb88..bcb2de9 100644 --- a/decoder/src/hardware.zig +++ b/decoder/src/hardware.zig @@ -1,4 +1,5 @@ //! Interact with the hardware security features of the MAX78000 + const msdk = @import("msdk"); /// Enable the Memory Protection Unit (MPU) over regions to make the code RX and From 37f75495e3944cb078951aa53b0e9d1bb9776d57 Mon Sep 17 00:00:00 2001 From: Christopher McDevitt <47703105+RebelAndroid@users.noreply.github.com> Date: Wed, 26 Feb 2025 15:26:41 -0500 Subject: [PATCH 10/10] Update hardware.zig Signed-off-by: Christopher McDevitt <47703105+RebelAndroid@users.noreply.github.com> --- decoder/src/hardware.zig | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/decoder/src/hardware.zig b/decoder/src/hardware.zig index bcb2de9..283d518 100644 --- a/decoder/src/hardware.zig +++ b/decoder/src/hardware.zig @@ -7,23 +7,23 @@ const msdk = @import("msdk"); pub fn mpu() void { msdk.ARM_MPU_Disable(); - // make SRAM non-executable + // Make SRAM non-executable msdk.ARM_MPU_SetRegion( - msdk.ARM_MPU_RBAR(1, 0x20000000), + msdk.ARM_MPU_RBAR(0, 0x20000000), msdk.ARM_MPU_RASR(1, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_1MB), ); msdk.ARM_MPU_Enable(msdk.MPU_CTRL_HFNMIENA_Msk | msdk.MPU_CTRL_PRIVDEFENA_Msk); - // except for this region which must be executable + // Except for this region which must be executable msdk.ARM_MPU_SetRegion( - msdk.ARM_MPU_RBAR(2, 0x20000000), + msdk.ARM_MPU_RBAR(1, 0x20000000), msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_FULL, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b10000000, msdk.ARM_MPU_REGION_SIZE_4KB), ); msdk.ARM_MPU_Enable(msdk.MPU_CTRL_HFNMIENA_Msk | msdk.MPU_CTRL_PRIVDEFENA_Msk); // Make FLASH read only msdk.ARM_MPU_SetRegion( - msdk.ARM_MPU_RBAR(3, 0x10000000), + msdk.ARM_MPU_RBAR(2, 0x10000000), msdk.ARM_MPU_RASR(0, msdk.ARM_MPU_AP_RO, msdk.ARM_MPU_ACCESS_ORDERED, 0, 0, 0, 0b00000000, msdk.ARM_MPU_REGION_SIZE_256KB), );