From 354516bbed3e6fc731672f81c1f745f5bbc5ad02 Mon Sep 17 00:00:00 2001 From: Zachary Yedidia Date: Thu, 23 Jan 2025 20:29:39 +0000 Subject: [PATCH] Some additional assertions --- liblfi/pal/platform.c | 1 + liblfi/pal/vm.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/liblfi/pal/platform.c b/liblfi/pal/platform.c index 65a7488..adc6243 100644 --- a/liblfi/pal/platform.c +++ b/liblfi/pal/platform.c @@ -13,6 +13,7 @@ lfi_new_plat(size_t pagesize) struct PlatOptions opts = (struct PlatOptions) { .pagesize = pagesize, .vmsize = gb(4), + .verifier = NULL, }; struct LFIPlatform* plat = malloc(sizeof(struct LFIPlatform)); diff --git a/liblfi/pal/vm.c b/liblfi/pal/vm.c index e93cc6d..52810a7 100644 --- a/liblfi/pal/vm.c +++ b/liblfi/pal/vm.c @@ -70,12 +70,13 @@ mapmem(struct LFIAddrSpace* as, uintptr_t start, size_t size, int prot, static int protectverify(lfiptr_t base, size_t size, int prot, LFIVerifier* verifier) { - if ((prot & LFI_PROT_EXEC) == 0 || !verifier) { + if (((prot & LFI_PROT_EXEC) == 0) || !verifier) { return host_mprotect((void*) base, size, prot); } else if ((prot & LFI_PROT_EXEC) && (prot & LFI_PROT_WRITE)) { return -1; } + assert(verifier); if (!lfiv_verify(verifier, (void*) base, size, (uintptr_t) base)) { return -1; } @@ -93,6 +94,7 @@ mapverify(struct LFIAddrSpace* as, uintptr_t start, size_t size, int prot, int r; if ((r = mapmem(as, start, size, LFI_PROT_READ, flags, hf, off)) < 0) return r; + assert(as->plat); if (protectverify(start, size, prot, as->plat->opts.verifier) < 0) { host_munmap((void*) start, size); return -1; @@ -147,6 +149,7 @@ lfi_as_mprotect(struct LFIAddrSpace* as, lfiptr_t addr, size_t size, int prot) assert(addr >= as->minaddr && addr + size <= as->maxaddr); // TODO: mark the mapping with libmmap? + assert(as->plat); return protectverify(addr, size, prot, as->plat->opts.verifier); }