From 7437f05ebd8be47d56ac2ea623dc2364915f9646 Mon Sep 17 00:00:00 2001 From: MEJARI REDDY BALAJI <130784457+mreddybalaji@users.noreply.github.com> Date: Sat, 8 Feb 2025 21:17:13 +0530 Subject: [PATCH] IDF Challenge --- submissions/mreddybalaji/Output file.docx | Bin 0 -> 17935 bytes submissions/mreddybalaji/pmp_check.py | 80 +++++++++++ .../mreddybalaji/pmp_configuration.txt | 128 ++++++++++++++++++ 3 files changed, 208 insertions(+) create mode 100644 submissions/mreddybalaji/Output file.docx create mode 100644 submissions/mreddybalaji/pmp_check.py create mode 100644 submissions/mreddybalaji/pmp_configuration.txt diff --git a/submissions/mreddybalaji/Output file.docx b/submissions/mreddybalaji/Output file.docx new file mode 100644 index 0000000000000000000000000000000000000000..aead7f71f8126a62dc597aa39b7d1b0392793f8c GIT binary patch literal 17935 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 F{{V#kV9@{o literal 0 HcmV?d00001 diff --git a/submissions/mreddybalaji/pmp_check.py b/submissions/mreddybalaji/pmp_check.py new file mode 100644 index 0000000..0d49a7e --- /dev/null +++ b/submissions/mreddybalaji/pmp_check.py @@ -0,0 +1,80 @@ +import sys + +def parse_pmp_config(file_path): + with open(file_path, 'r') as f: + lines = [line.strip() for line in f.readlines()] + + if len(lines) != 128: + raise ValueError("PMP configuration file must contain exactly 128 lines.") + + pmpcfg = [int(lines[i], 16) for i in range(64)] + pmpaddr = [int(lines[i], 16) for i in range(64, 128)] + + return pmpcfg, pmpaddr + +def check_pmp_access(pmpcfg, pmpaddr, address, privilege_mode, operation): + for i in range(64): + cfg = (pmpcfg[i // 8] >> ((i % 8) * 8)) & 0xFF + addr = pmpaddr[i] << 2 # pmpaddr is in 4-byte granularity + + A = (cfg >> 3) & 0b11 # Address-matching mode + R = (cfg >> 0) & 1 # Read permission + W = (cfg >> 1) & 1 # Write permission + X = (cfg >> 2) & 1 # Execute permission + + print(f"PMP Entry {i}: A={A}, R={R}, W={W}, X={X}, addr={hex(addr)}") # Debugging output + + if A == 0: # Disabled + continue + elif A == 1: # TOR (Top of Range) + if i == 0: + continue + lower_bound = pmpaddr[i - 1] << 2 + upper_bound = addr + print(f" Checking TOR: [{hex(lower_bound)}, {hex(upper_bound)})") + if lower_bound <= address < upper_bound: + return validate_access(R, W, X, privilege_mode, operation) + elif A == 2: # NA4 (Naturally aligned 4-byte region) + print(f" Checking NA4: {hex(addr)}") + if addr == address: + return validate_access(R, W, X, privilege_mode, operation) + elif A == 3: # NAPOT (Naturally aligned power-of-two region) + size = 1 << ((~addr & (addr + 1)).bit_length()) # Corrected NAPOT size calculation + base = addr & ~(size - 1) + print(f" Checking NAPOT: Base={hex(base)}, Size={hex(size)}") + if base <= address < base + size: + return validate_access(R, W, X, privilege_mode, operation) + + # If no PMP entry matches, access is **allowed in M-mode** but **faulted in U-mode** + return privilege_mode == 'U' # True = fault, False = allowed + +def validate_access(R, W, X, privilege_mode, operation): + if operation == 'R' and not R: + return True + if operation == 'W' and not W: + return True + if operation == 'X' and not X: + return True + return False # No fault + +def main(): + if len(sys.argv) != 5: + print("Usage: python pmp_check.py

") + sys.exit(1) + + pmp_config_file = sys.argv[1] + address = int(sys.argv[2], 16) + privilege_mode = sys.argv[3] + operation = sys.argv[4] + + if privilege_mode not in {'M', 'S', 'U'} or operation not in {'R', 'W', 'X'}: + print("Invalid privilege mode or operation.") + sys.exit(1) + + pmpcfg, pmpaddr = parse_pmp_config(pmp_config_file) + access_fault = check_pmp_access(pmpcfg, pmpaddr, address, privilege_mode, operation) + + print("Access Fault" if access_fault else "Access Allowed") + +if __name__ == "__main__": + main() diff --git a/submissions/mreddybalaji/pmp_configuration.txt b/submissions/mreddybalaji/pmp_configuration.txt new file mode 100644 index 0000000..d0d3994 --- /dev/null +++ b/submissions/mreddybalaji/pmp_configuration.txt @@ -0,0 +1,128 @@ +0x00000000 +0x00000001 +0x00000003 +0x00000007 +0x0000000F +0x0000001F +0x0000003F +0x0000007F +0x000000FF +0x000001FF +0x000003FF +0x000007FF +0x00000FFF +0x00001FFF +0x00003FFF +0x00007FFF +0x0000FFFF +0x0001FFFF +0x0003FFFF +0x0007FFFF +0x000FFFFF +0x001FFFFF +0x003FFFFF +0x007FFFFF +0x00FFFFFF +0x01FFFFFF +0x03FFFFFF +0x07FFFFFF +0x0FFFFFFF +0x1FFFFFFF +0x3FFFFFFF +0x7FFFFFFF +0x80000000 +0x80000001 +0x80000003 +0x80000007 +0x8000000F +0x8000001F +0x8000003F +0x8000007F +0x800000FF +0x800001FF +0x800003FF +0x800007FF +0x80000FFF +0x80001FFF +0x80003FFF +0x80007FFF +0x8000FFFF +0x8001FFFF +0x8003FFFF +0x8007FFFF +0x800FFFFF +0x801FFFFF +0x803FFFFF +0x807FFFFF +0x80FFFFFF +0x81FFFFFF +0x83FFFFFF +0x87FFFFFF +0x8FFFFFFF +0x9FFFFFFF +0xAFFFFFFF +0xBFFFFFFF +0xC0000000 +0xC0000001 +0xC0000003 +0xC0000007 +0xC000000F +0xC000001F +0xC000003F +0xC000007F +0xC00000FF +0xC00001FF +0xC00003FF +0xC00007FF +0xC0000FFF +0xC0001FFF +0xC0003FFF +0xC0007FFF +0xC000FFFF +0xC001FFFF +0xC003FFFF +0xC007FFFF +0xC00FFFFF +0xC01FFFFF +0xC03FFFFF +0xC07FFFFF +0xC0FFFFFF +0xC1FFFFFF +0xC3FFFFFF +0xC7FFFFFF +0xCFFFFFFF +0xDFFFFFFF +0xEFFFFFFF +0xF0000000 +0xF0000001 +0xF0000003 +0xF0000007 +0xF000000F +0xF000001F +0xF000003F +0xF000007F +0xF00000FF +0xF00001FF +0xF00003FF +0xF00007FF +0xF0000FFF +0xF0001FFF +0xF0003FFF +0xF0007FFF +0xF000FFFF +0xF001FFFF +0xF003FFFF +0xF007FFFF +0xF00FFFFF +0xF01FFFFF +0xF03FFFFF +0xF07FFFFF +0xF0FFFFFF +0xF1FFFFFF +0xF3FFFFFF +0xF7FFFFFF +0xFFFFFFFF +0xFFFFFFFFFFFFFFFF +0xFFFFFFFFFFFFFFFE +0xFFFFFFFFFFFFFFFC +0xFFFFFFFFFFFFFFF8