diff --git a/exec.c b/exec.c
index 98c5d4ceaaca6616ab6ecec3120ffb591a06fdbb..1c653de43f849d16fcf73e62d0c4c36936d73c03 100644
--- a/exec.c
+++ b/exec.c
@@ -62,7 +62,7 @@ exec(char *path, char **argv)
       goto bad;
     if(ph.type != ELF_PROG_LOAD)
       continue;
-    if(ph.va + ph.memsz > sz)
+    if(ph.va + ph.memsz < ph.va || ph.va + ph.memsz > sz || ph.memsz < ph.filesz)
       goto bad;
     if(readi(ip, mem + ph.va, ph.offset, ph.filesz) != ph.filesz)
       goto bad;