--- /sys/src/9k/port/fault.c +++ /sys/src/9k/port/fault.c @@ -268,20 +268,15 @@ okaddr(uintptr addr, long len, int write) { Segment *s; - if(len >= 0) { - for(;;) { - s = seg(up, addr, 0); - if(s == 0 || (write && (s->type&SG_RONLY))) - break; - - if(addr+len > s->top) { - len -= s->top - addr; - addr = s->top; - continue; - } - return 1; + /* second test is paranoia only needed on 64-bit systems */ + if(len >= 0 && addr+len >= addr) + while ((s = seg(up, addr, 0)) != nil && + (!write || !(s->type&SG_RONLY))) { + if(addr+len <= s->top) + return 1; + len -= s->top - addr; + addr = s->top; } - } return 0; }