shithub: riscv

Download patch

ref: dcea714680fd6836380ea2b190e3b61b8323ab22
parent: 7613608b23211a418cfe7404dbe2fcb3ee8b0cd7
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sat Feb 1 05:17:53 EST 2014

kernel: fix pointer truncation in xspanalloc(), fix format prints

--- a/sys/src/9/port/xalloc.c
+++ b/sys/src/9/port/xalloc.c
@@ -57,6 +57,7 @@
 
 	upages = conf.upages;
 	kpages = conf.npage - upages;
+
 	pm = palloc.mem;
 	for(i=0; i<nelem(conf.mem); i++){
 		m = &conf.mem[i];
@@ -99,7 +100,7 @@
 		panic("xspanalloc: %lud %d %lux", size, align, span);
 
 	if(span > 2) {
-		v = (a + span) & ~(span-1);
+		v = (a + span) & ~((uintptr)span-1);
 		t = v - a;
 		if(t > 0)
 			xhole(PADDR(a), t);
@@ -111,7 +112,7 @@
 		v = a;
 
 	if(align > 1)
-		v = (v + align) & ~(align-1);
+		v = (v + align) & ~((uintptr)align-1);
 
 	return (void*)v;
 }
@@ -261,16 +262,17 @@
 {
 	int i;
 	Hole *h;
+	uintptr s;
 
 	i = 0;
 	for(h = xlists.flist; h; h = h->link)
 		i++;
-
 	print("%d holes free\n", i);
-	i = 0;
+
+	s = 0;
 	for(h = xlists.table; h; h = h->link) {
 		print("%#p %#p %p\n", h->addr, h->top, h->size);
-		i += h->size;
+		s += h->size;
 	}
-	print("%d bytes free\n", i);
+	print("%lld bytes free\n", (vlong)s);
 }
--