code: plan9front

Download patch

ref: 1bd4c243ada35e70ff3c92e4019fb6adcc9b4bdc
parent: cb2a55aeb38ffa5ac168485ada6bbc44b4f88c1d
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Thu Jun 18 22:45:58 EDT 2015

kernel: ignore last page at the top of virtual kernel address space for xalloc()

avoding kernel address -BY2PG because of end pointer wrapping to zero.

--- a/sys/src/9/port/xalloc.c
+++ b/sys/src/9/port/xalloc.c
@@ -71,8 +71,10 @@
 		/* first give to kernel */
 		if(n > 0){
 			m->kbase = (uintptr)KADDR(m->base);
-			m->klimit = (uintptr)KADDR(m->base+size-1)+1;
-			xhole(m->base, size);
+			m->klimit = (uintptr)m->kbase+size;
+			if(m->klimit == 0)
+				m->klimit = (uintptr)-BY2PG;
+			xhole(m->base, m->klimit - m->kbase);
 			kpages -= n;
 		}
 		/* if anything left over, give to user */