From 0f510c4fc8d2bf653976dec2441cfe3e8a153019 Mon Sep 17 00:00:00 2001 From: Shawn Nock Date: Mon, 13 Jan 2020 13:30:48 -0500 Subject: [PATCH] Working version --- bin/mtd-rw.ko | Bin 0 -> 3264 bytes bin/uboot-feb2019.bin | Bin 0 -> 196608 bytes build.zig | 21 +++++++++ src/main.zig | 43 +++++++++++++++++ src/mtd-rw.zig | 69 +++++++++++++++++++++++++++ src/mtd.zig | 105 ++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 238 insertions(+) create mode 100644 bin/mtd-rw.ko create mode 100644 bin/uboot-feb2019.bin create mode 100644 build.zig create mode 100644 src/main.zig create mode 100644 src/mtd-rw.zig create mode 100644 src/mtd.zig diff --git a/bin/mtd-rw.ko b/bin/mtd-rw.ko new file mode 100644 index 0000000000000000000000000000000000000000..6a4b427bafdd4b2b20a8743dc63e34495f269d7b GIT binary patch literal 3264 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

; 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 mtd0_size) { + std.debug.warn("Error: mtd0 isn\'t large enough to hold the new image ({} > {})\n", + .{uboot_bin.len, mtd0_size}); + return 1; + } + + const no_write_needed = try mtd.verify("/dev/mtd0", uboot_bin); + if (no_write_needed) { + std.debug.warn("U-Boot is up to date. Exiting.\n", .{}); + return 0; + } + + // Erase mtd0 + try mtd.erase_device("/dev/mtd0"); + + // Write mtd0 + std.debug.warn("Writing payload\n", .{}); + try mtd.write_device("/dev/mtd0", uboot_bin); + + // Verify mtd0 + const writing_verified = try mtd.verify("/dev/mtd0", uboot_bin); + if (!writing_verified) { + std.debug.warn("Verify Failed!\n", .{}); + return 2; + } + std.debug.warn("Success\n", .{}); + return 0; +} diff --git a/src/mtd-rw.zig b/src/mtd-rw.zig new file mode 100644 index 0000000..5e567a5 --- /dev/null +++ b/src/mtd-rw.zig @@ -0,0 +1,69 @@ +const std = @import("std"); +const os = std.os; + +const mtd_rw_ko = @embedFile("../bin/mtd-rw.ko"); + +const InitModuleError = error { + ModuleSignatureMisformatted, + TimeoutResolvingSymbol, + BadAddress, + ModuleSigInvalid, + OutOfMemory, + PermissionDenied, + AlreadyLoaded, + BadParams, + InvalidModule, + +}; + +const DeleteModuleError = error { + ModuleNotLive, + BadAddress, + ModuleNotFound, + PermissionDenied, + ModuleInUse, +}; + +pub fn load() !void { + try insmod(mtd_rw_ko, "i_want_a_brick=1"); +} + +pub fn unload() void { + rmmod("mtd_rw", os.O_NONBLOCK) catch |err| { + std.debug.warn("Failed to unload module: {}\n", .{err}); + }; +} + +pub fn insmod(buf: []const u8, args: [*:0]const u8) !void { + const errno = os.linux.getErrno( + os.linux.syscall3( + os.linux.SYS_init_module, @ptrToInt(&buf[0]), buf.len, @ptrToInt(args))); + switch (errno) { + 0 => return, + os.EEXIST => return, // It's not a failure if we have what we need + os.EBADMSG => return InitModuleError.ModuleSignatureMisformatted, + os.EBUSY => return InitModuleError.TimeoutResolvingSymbol, + os.EFAULT => return InitModuleError.BadAddress, + // os.ENOKEY => return InitModuleError.ModuleSigInvalid, + os.ENOMEM => return InitModuleError.OutOfMemory, + os.EPERM => return InitModuleError.PermissionDenied, + os.EINVAL => return InitModuleError.BadParams, + os.ENOEXEC => return InitModuleError.InvalidModule, + else => |err| return os.unexpectedErrno(err), + } +} + +pub fn rmmod(mod_name: [*:0]const u8, flags: u32) !void { + const errno = os.linux.getErrno( + std.os.linux.syscall2( + std.os.linux.SYS_delete_module, @ptrToInt(mod_name), flags)); + switch (errno) { + 0 => return, + os.EBUSY => return DeleteModuleError.ModuleNotLive, + os.EFAULT => return DeleteModuleError.BadAddress, + os.ENOENT => return DeleteModuleError.ModuleNotFound, + os.EPERM => return DeleteModuleError.PermissionDenied, + os.EWOULDBLOCK => return DeleteModuleError.ModuleInUse, + else => |err| return os.unexpectedErrno(err), + } +} diff --git a/src/mtd.zig b/src/mtd.zig new file mode 100644 index 0000000..95665c5 --- /dev/null +++ b/src/mtd.zig @@ -0,0 +1,105 @@ +const std = @import("std"); +const os = std.os; + +const mtd_user = @cImport(@cInclude("mtd/mtd-user.h")); + +const Allocator = std.heap.c_allocator; + +const MEMUNLOCK = 2148027654; +const MEMERASE = 2148027650; + +pub fn mtd_info_get(name: []const u8, out: []u8) !void { + var path_buf: [64]u8 = undefined; + const path = try std.fmt.bufPrint(path_buf[0..], "{}/{}", .{"/sys/class/mtd/mtd0/", name}); + + var f = try std.fs.openFileAbsolute(path, .{.read = true}); + defer f.close(); + const num_read = try f.read(out); + out = out[0..num_read-1]; +} + +pub fn mtd_info_get_usize(name: []const u8) !usize { + var buf: [64]u8 = undefined; + var buf_sl = buf[0..]; + try mtd_info_get(name, buf_sl); + return try std.fmt.parseUnsigned(usize, buf_sl, 10); +} + +const IoctlError = error { + BadFd, + SignalCaught, + BadIoctl, + IOError, + NotSupported, + NotSupportedSub, + Failed, +}; + +fn ioctl3(fildes: os.fd_t, request: usize, arg: usize) !void { + const errno = os.linux.getErrno( + os.linux.syscall3(std.os.SYS_ioctl, @intCast(usize, fildes), request, arg)); + switch (errno) { + 0 => return, + os.EBADF => return IoctlError.BadFd, + os.EINTR => return IoctlError.SignalCaught, + os.EINVAL => return IoctlError.BadIoctl, + os.EIO => return IoctlError.IOError, + os.ENOTTY => return IoctlError.NotSupportedSub, + os.ENXIO => return IoctlError.Failed, + os.ENODEV => return IoctlError.NotSupported, + else => |err| return os.unexpectedErrno(err), + } +} + +const MtdError = error { + TruncatedWrite, + TruncatedRead, +}; + +pub fn write_device(dev: []const u8, buf: []const u8) !void { + var f = try std.fs.openFileAbsolute(dev, .{.write = true}); + defer f.close(); + try f.write(buf); +} + +pub fn erase_device(dev: []const u8) !void { + const erasesize = try mtd_info_get_usize("erasesize"); + const size = try mtd_info_get_usize("size"); + var erased: usize = 0; + const fd = try os.open(dev, os.O_RDWR, 0); + defer os.close(fd); + while (erased < size) { + try erase_page(fd, erased, erasesize); + erased += erasesize; + } +} + +pub fn erase_page(fd: os.fd_t, start: usize, len: usize) !void { + const end = start + len - 1; + std.debug.warn("Erasing {} -> {}\n", .{start, end}); + + const ei = mtd_user.erase_info_t{ .length = len, .start = start }; + try ioctl3(fd, MEMERASE, @ptrToInt(&ei)); +} + +pub fn verify(dev: []const u8, buf: []const u8) !bool { + const size = try mtd_info_get_usize("size"); + var current = try Allocator.alloc(u8, size); + + var f = try std.fs.openFileAbsolute(dev, .{.read = true}); + defer f.close(); + + const num_read = try f.read(current); + if (num_read != size) { + std.debug.warn("Incomplete read of {}. {}/{} bytes read", .{dev, num_read, size}); + return MtdError.TruncatedRead; + } + + var dev_digest: [std.crypto.Md5.digest_length]u8 = undefined; + std.crypto.Md5.hash(current, dev_digest[0..]); + + var buf_digest: [std.crypto.Md5.digest_length]u8 = undefined; + std.crypto.Md5.hash(buf, buf_digest[0..]); + + return std.mem.eql(u8, dev_digest[0..], buf_digest[0..]); +}