From 44121465fa1f76809daa9ac26d18f86f96f09ac3 Mon Sep 17 00:00:00 2001 From: latifbhatti Date: Mon, 10 Feb 2025 10:27:58 +0500 Subject: [PATCH] Completed IDL programming challenge and submitted solution --- .../Generated Table from latex.pdf | Bin 0 -> 69103 bytes .../latifbhatti/explain_pmp_config.tex | 154 ++++++++++++++++++ submissions/latifbhatti/pmp_check.py | 98 +++++++++++ submissions/latifbhatti/pmp_config.txt | 128 +++++++++++++++ 4 files changed, 380 insertions(+) create mode 100644 submissions/latifbhatti/Generated Table from latex.pdf create mode 100644 submissions/latifbhatti/explain_pmp_config.tex create mode 100644 submissions/latifbhatti/pmp_check.py create mode 100644 submissions/latifbhatti/pmp_config.txt diff --git a/submissions/latifbhatti/Generated Table from latex.pdf b/submissions/latifbhatti/Generated Table from latex.pdf new file mode 100644 index 0000000000000000000000000000000000000000..64797f9876e4c72fd4feb60245f8a310bb480234 GIT binary patch literal 69103 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\ttfamily}c|>{\ttfamily}c|c|c|c|c|c|c|p{5cm}|p{4cm}|} +\hline +\rowcolor{lightgray} % Shade header row +\textbf{Hex} & \textbf{Binary} & \textbf{L} & \textbf{Reserved} & \textbf{A} & \textbf{X} & \textbf{W} & \textbf{R} & \textbf{Status} & \textbf{Example} \\ +\hline +\endhead % Ensures the header repeats on every page + +0x0 & 00000000 & 0 & 000 & 00 & 0 & 0 & 0 & Disabled, no perms & Unused entry \\ +\hline +0x1 & 00000001 & 0 & 000 & 00 & 0 & 0 & 1 & Disabled, read-only & Read-only mem \\ +\hline +0x2 & 00000010 & 0 & 000 & 00 & 0 & 1 & 0 & Disabled, write-only & Write-only mem \\ +\hline +0x3 & 00000011 & 0 & 000 & 00 & 0 & 1 & 1 & Disabled, read-write & Read-write mem \\ +\hline +0x4 & 00000100 & 0 & 000 & 00 & 1 & 0 & 0 & Disabled, exec-only & Exec-only code \\ +\hline +0x5 & 00000101 & 0 & 000 & 00 & 1 & 0 & 1 & Disabled, read-exec & Read-exec code \\ +\hline +0x6 & 00000110 & 0 & 000 & 00 & 1 & 1 & 0 & Disabled, write-exec & Write-exec code \\ +\hline +0x7 & 00000111 & 0 & 000 & 00 & 1 & 1 & 1 & Disabled, r-w-x & R-W-X code \\ +\hline +0x8 & 00001000 & 0 & 000 & 01 & 0 & 0 & 0 & TOR, no perms & Unused TOR \\ +\hline +0x9 & 00001001 & 0 & 000 & 01 & 0 & 0 & 1 & TOR, read-only & Read-only TOR \\ +\hline +0xA & 00001010 & 0 & 000 & 01 & 0 & 1 & 0 & TOR, write-only & Write-only TOR \\ +\hline +0xB & 00001011 & 0 & 000 & 01 & 0 & 1 & 1 & TOR, read-write & Read-write TOR \\ +\hline +0xC & 00001100 & 0 & 000 & 01 & 1 & 0 & 0 & TOR, exec-only & Exec-only TOR \\ +\hline +0xD & 00001101 & 0 & 000 & 01 & 1 & 0 & 1 & TOR, read-exec & Read-exec TOR \\ +\hline +0xE & 00001110 & 0 & 000 & 01 & 1 & 1 & 0 & TOR, write-exec & Write-exec TOR \\ +\hline +0xF & 00001111 & 0 & 000 & 01 & 1 & 1 & 1 & TOR, r-w-x & R-W-X TOR \\ +\hline +0x10 & 00010000 & 0 & 000 & 10 & 0 & 0 & 0 & NA4, no perms & Unused NA4 \\ +\hline +0x11 & 00010001 & 0 & 000 & 10 & 0 & 0 & 1 & NA4, read-only & Read-only NA4 \\ +\hline +0x12 & 00010010 & 0 & 000 & 10 & 0 & 1 & 0 & NA4, write-only & Write-only NA4 \\ +\hline +0x13 & 00010011 & 0 & 000 & 10 & 0 & 1 & 1 & NA4, read-write & Read-write NA4 \\ +\hline +0x14 & 00010100 & 0 & 000 & 10 & 1 & 0 & 0 & NA4, exec-only & Exec-only NA4 \\ +\hline +0x15 & 00010101 & 0 & 000 & 10 & 1 & 0 & 1 & NA4, read-exec & Read-exec NA4 \\ +\hline +0x16 & 00010110 & 0 & 000 & 10 & 1 & 1 & 0 & NA4, write-exec & Write-exec NA4 \\ +\hline +0x17 & 00010111 & 0 & 000 & 10 & 1 & 1 & 1 & NA4, r-w-x & R-W-X NA4 \\ +\hline +0x18 & 00011000 & 0 & 000 & 11 & 0 & 0 & 0 & NAPOT, no perms & Unused NAPOT \\ +\hline +0x19 & 00011001 & 0 & 000 & 11 & 0 & 0 & 1 & NAPOT, read-only & Read-only NAPOT \\ +\hline +0x1A & 00011010 & 0 & 000 & 11 & 0 & 1 & 0 & NAPOT, write-only & Write-only NAPOT \\ +\hline +0x1B & 00011011 & 0 & 000 & 11 & 0 & 1 & 1 & NAPOT, read-write & Read-write NAPOT \\ +\hline +0x1C & 00011100 & 0 & 000 & 11 & 1 & 0 & 0 & NAPOT, exec-only & Exec-only NAPOT \\ +\hline +0x1D & 00011101 & 0 & 000 & 11 & 1 & 0 & 1 & NAPOT, read-exec & Read-exec NAPOT \\ +\hline +0x1E & 00011110 & 0 & 000 & 11 & 1 & 1 & 0 & NAPOT, write-exec & Write-exec NAPOT \\ +\hline +0x1F & 00011111 & 0 & 000 & 11 & 1 & 1 & 1 & NAPOT, r-w-x & R-W-X NAPOT \\ +\hline +0x20 & 00100000 & 0 & 001 & 00 & 0 & 0 & 0 & Disabled, no perms & Unused entry \\ +\hline +0x21 & 00100001 & 0 & 001 & 00 & 0 & 0 & 1 & Disabled, read-only & Read-only mem \\ +\hline +0x22 & 00100010 & 0 & 001 & 00 & 0 & 1 & 0 & Disabled, write-only & Write-only mem \\ +\hline +0x23 & 00100011 & 0 & 001 & 00 & 0 & 1 & 1 & Disabled, read-write & Read-write mem \\ +\hline +0x24 & 00100100 & 0 & 001 & 00 & 1 & 0 & 0 & Disabled, exec-only & Exec-only code \\ +\hline +0x25 & 00100101 & 0 & 001 & 00 & 1 & 0 & 1 & Disabled, read-exec & Read-exec code \\ +\hline +0x26 & 00100110 & 0 & 001 & 00 & 1 & 1 & 0 & Disabled, write-exec & Write-exec code \\ +\hline +0x27 & 00100111 & 0 & 001 & 00 & 1 & 1 & 1 & Disabled, r-w-x & R-W-X code \\ +\hline +0x28 & 00101000 & 0 & 001 & 01 & 0 & 0 & 0 & TOR, no perms & Unused TOR \\ +\hline +0x29 & 00101001 & 0 & 001 & 01 & 0 & 0 & 1 & TOR, read-only & Read-only TOR \\ +\hline +0x2A & 00101010 & 0 & 001 & 01 & 0 & 1 & 0 & TOR, write-only & Write-only TOR \\ +\hline +0x2B & 00101011 & 0 & 001 & 01 & 0 & 1 & 1 & TOR, read-write & Read-write TOR \\ +\hline +0x2C & 00101100 & 0 & 001 & 01 & 1 & 0 & 0 & TOR, exec-only & Exec-only TOR \\ +\hline +0x2D & 00101101 & 0 & 001 & 01 & 1 & 0 & 1 & TOR, read-exec & Read-exec TOR \\ +\hline +0x2E & 00101110 & 0 & 001 & 01 & 1 & 1 & 0 & TOR, write-exec & Write-exec TOR \\ +\hline +0x2F & 00101111 & 0 & 001 & 01 & 1 & 1 & 1 & TOR, r-w-x & R-W-X TOR \\ +\hline +0x30 & 00110000 & 0 & 001 & 10 & 0 & 0 & 0 & NA4, no perms & Unused NA4 \\ +\hline +0x31 & 00110001 & 0 & 001 & 10 & 0 & 0 & 1 & NA4, read-only & Read-only NA4 \\ +\hline +0x32 & 00110010 & 0 & 001 & 10 & 0 & 1 & 0 & NA4, write-only & Write-only NA4 \\ +\hline +0x33 & 00110011 & 0 & 001 & 10 & 0 & 1 & 1 & NA4, read-write & Read-write NA4 \\ +\hline +0x34 & 00110100 & 0 & 001 & 10 & 1 & 0 & 0 & NA4, exec-only & Exec-only NA4 \\ +\hline +0x35 & 00110101 & 0 & 001 & 10 & 1 & 0 & 1 & NA4, read-exec & Read-exec NA4 \\ +\hline +0x36 & 00110110 & 0 & 001 & 10 & 1 & 1 & 0 & NA4, write-exec & Write-exec NA4 \\ +\hline +0x37 & 00110111 & 0 & 001 & 10 & 1 & 1 & 1 & NA4, r-w-x & R-W-X NA4 \\ +\hline +0x38 & 00111000 & 0 & 001 & 11 & 0 & 0 & 0 & NAPOT, no perms & Unused NAPOT \\ +\hline +0x39 & 00111001 & 0 & 001 & 11 & 0 & 0 & 1 & NAPOT, read-only & Read-only NAPOT \\ +\hline +0x3A & 00111010 & 0 & 001 & 11 & 0 & 1 & 0 & NAPOT, write-only & Write-only NAPOT \\ +\hline +0x3B & 00111011 & 0 & 001 & 11 & 0 & 1 & 1 & NAPOT, read-write & Read-write NAPOT \\ +\hline +0x3C & 00111100 & 0 & 001 & 11 & 1 & 0 & 0 & NAPOT, exec-only & Exec-only NAPOT \\ +\hline +0x3D & 00111101 & 0 & 001 & 11 & 1 & 0 & 1 & NAPOT, read-exec & Read-exec NAPOT \\ +\hline +0x3E & 00111110 & 0 & 001 & 11 & 1 & 1 & 0 & NAPOT, write-exec & Write-exec NAPOT \\ +\hline +0x3F & 00111111 & 0 & 001 & 11 & 1 & 1 & 1 & NAPOT, r-w-x & R-W-X NAPOT \\ +\hline +\end{longtable} + +\end{document} \ No newline at end of file diff --git a/submissions/latifbhatti/pmp_check.py b/submissions/latifbhatti/pmp_check.py new file mode 100644 index 0000000..4f460fb --- /dev/null +++ b/submissions/latifbhatti/pmp_check.py @@ -0,0 +1,98 @@ +import sys +import re + +def parse_pmp_config(file_path): + with open(file_path, 'r') as file: + lines = file.readlines() + pmpcfg = [int(line.strip(), 16) & 0xFF for line in lines[:64]] + pmpaddr = [int(line.strip(), 16) for line in lines[64:128]] + return pmpcfg, pmpaddr + +def get_pmp_region(base, a, pmpaddr_value, pmpaddr): + if a == 1: + if base == 0: + prev_base = 0 + else: + prev_base = (pmpaddr[base - 1]) + region_start, region_end = prev_base, (pmpaddr_value) + elif a == 2: + region_start = (pmpaddr_value) + region_end = region_start + 3 + elif a == 3: + n = 0 + mask = 1 + while (pmpaddr_value & mask) == mask: + n += 1 + mask = (mask << 1) | 1 + size = 1 << (n + 2) + region_start = (pmpaddr_value << 2) & ~(size - 1) + region_end = region_start + size - 1 + else: + return None + return region_start, region_end + +def check_pmp_access(pmpcfg, pmpaddr, addr, mode, operation): + addr = int(addr, 16) + matching_index = -1 + for i in range(0, 64, 1): + cfg = pmpcfg[i] + a = (cfg >> 3) & 0x3 + if a == 0: + continue + region = get_pmp_region(i, a, pmpaddr[i], pmpaddr) + if not region: + continue + region_start, region_end = region + if region_start <= addr <= region_end: + matching_index = i + break + cfg = pmpcfg[matching_index] + l = (cfg >> 7) & 0x1 + r = (cfg >> 0) & 0x1 + w = (cfg >> 1) & 0x1 + x = (cfg >> 2) & 0x1 + print("value of pmpcfg = " , hex(cfg) ,"\noperation R = " , r,"\noperation W = " , w,"\noperation X = " , x) + if matching_index == -1: + if mode in ['S', 'U']: + return False + else: + return True + + if mode == 'M': + if l: + return True + elif mode in ['S', 'U']: + if l: + return False + if operation == 'R' and not r: + return False + if operation == 'W' and not w: + return False + if operation == 'X' and not x: + return False + return True + +def validate_hex_address(addr): + return re.match(r'^0x[0-9a-fA-F]+$', addr) is not None + +def main(): + if len(sys.argv) != 5: + print("Usage: python pmp_check.py ") + sys.exit(1) + if not validate_hex_address(sys.argv[2]): + print("Invalid physical address format. Must be in hexadecimal with a leading '0x'.") + sys.exit(1) + pmpcfg, pmpaddr = parse_pmp_config(sys.argv[1]) + addr = sys.argv[2] + mode = sys.argv[3].upper() + operation = sys.argv[4].upper() + if mode not in ['M', 'S', 'U'] or operation not in ['R', 'W', 'X']: + print("Invalid privilege mode or operation.") + sys.exit(1) + if check_pmp_access(pmpcfg, pmpaddr, addr, mode, operation): + print("Access allowed.") + else: + print("Access fault.") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/submissions/latifbhatti/pmp_config.txt b/submissions/latifbhatti/pmp_config.txt new file mode 100644 index 0000000..3210144 --- /dev/null +++ b/submissions/latifbhatti/pmp_config.txt @@ -0,0 +1,128 @@ +0x0 +0x1 +0x2 +0x3 +0x4 +0x5 +0x6 +0x7 +0x8 +0x9 +0xA +0xB +0xC +0xD +0xE +0xF +0x10 +0x11 +0x12 +0x13 +0x14 +0x15 +0x16 +0x17 +0x18 +0x19 +0x1A +0x1B +0x1C +0x1D +0x1E +0x1F +0x20 +0x21 +0x22 +0x23 +0x24 +0x25 +0x26 +0x27 +0x28 +0x29 +0x2A +0x2B +0x2C +0x2D +0x2E +0x2F +0x30 +0x31 +0x32 +0x33 +0x34 +0x35 +0x36 +0x37 +0x38 +0x39 +0x3A +0x3B +0x3C +0x3D +0x3E +0x3F +0x100 +0x1000 +0x2000 +0x5000 +0x80000000 +0x10000000 +0x20000000 +0x70000000 +0x80000000 +0x90000000 +0xA0000000 +0xB0000000 +0xC0000000 +0xD0000000 +0xE0000000 +0xF0000000 +0x100000000 +0x110000000 +0x120000000 +0x130000000 +0x140000000 +0x150000000 +0x160000000 +0x170000000 +0x180000000 +0x190000000 +0x1A0000000 +0x1B0000000 +0x1C0000000 +0x1D0000000 +0x1E0000000 +0x1F0000000 +0x200000000 +0x210000000 +0x220000000 +0x230000000 +0x240000000 +0x250000000 +0x260000000 +0x270000000 +0x280000000 +0x290000000 +0x2A0000000 +0x2B0000000 +0x2C0000000 +0x2D0000000 +0x2E0000000 +0x2F0000000 +0x300000000 +0x310000000 +0x320000000 +0x330000000 +0x340000000 +0x350000000 +0x360000000 +0x370000000 +0x380000000 +0x390000000 +0x3A0000000 +0x3B0000000 +0x3C0000000 +0x3D0000000 +0x3E0000000 +0x3F0000000 \ No newline at end of file