shithub: riscv

Download patch

ref: 7265a09524fdac42b776d01f474a9eb16805ee59
parent: cdc2c30e99f2fb3d65dfbc8ef73efd433a3f1966
parent: cafcffb1dce89b7e10ddd9149e4b0928ac2b9b38
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Wed Sep 25 16:27:34 EDT 2013

merge

--- a/sys/src/9/port/sysproc.c
+++ b/sys/src/9/port/sysproc.c
@@ -1109,13 +1109,15 @@
 	long *addr;
 	Segment *s;
 
-	validaddr(arg[0], sizeof(long), 1);
 	evenaddr(arg[0]);
 	addr = (long*)arg[0];
 	block = arg[1];
-	
-	if((s = seg(up, (ulong)addr, 0)) == nil)
+
+	s = seg(up, (ulong)addr, 0);
+	if(s == nil || (s->type&SG_RONLY) != 0 || (ulong)addr+sizeof(long) > s->top){
+		validaddr((ulong)addr, sizeof(long), 1);
 		error(Ebadarg);
+	}
 	if(*addr < 0)
 		error(Ebadarg);
 	return semacquire(s, addr, block);
@@ -1128,13 +1130,15 @@
 	ulong ms;
 	Segment *s;
 
-	validaddr(arg[0], sizeof(long), 1);
 	evenaddr(arg[0]);
 	addr = (long*)arg[0];
 	ms = arg[1];
 
-	if((s = seg(up, (ulong)addr, 0)) == nil)
+	s = seg(up, (ulong)addr, 0);
+	if(s == nil || (s->type&SG_RONLY) != 0 || (ulong)addr+sizeof(long) > s->top){
+		validaddr((ulong)addr, sizeof(long), 1);
 		error(Ebadarg);
+	}
 	if(*addr < 0)
 		error(Ebadarg);
 	return tsemacquire(s, addr, ms);
@@ -1146,13 +1150,15 @@
 	long *addr, delta;
 	Segment *s;
 
-	validaddr(arg[0], sizeof(long), 1);
 	evenaddr(arg[0]);
 	addr = (long*)arg[0];
 	delta = arg[1];
 
-	if((s = seg(up, (ulong)addr, 0)) == nil)
+	s = seg(up, (ulong)addr, 0);
+	if(s == nil || (s->type&SG_RONLY) != 0 || (ulong)addr+sizeof(long) > s->top){
+		validaddr((ulong)addr, sizeof(long), 1);
 		error(Ebadarg);
+	}
 	/* delta == 0 is a no-op, not a release */
 	if(delta < 0 || *addr < 0)
 		error(Ebadarg);
--- a/sys/src/boot/pc/fat.c
+++ b/sys/src/boot/pc/fat.c
@@ -339,7 +339,7 @@
 		return -1;
 	if(buf[0x1fe] != 0x55 || buf[0x1ff] != 0xAA)
 		return -1;
-	if(lba == 0){
+	if(lba == 0 && (drive & 0x80) == 0){	/* floppy */
 		fat->drive = drive;
 		fat->partlba = 0;
 		if(!conffat(fat, buf))
--- a/sys/src/cmd/mothra/mothra.c
+++ b/sys/src/cmd/mothra/mothra.c
@@ -1016,9 +1016,11 @@
 			plrtstr(&t->next, 0, 0, t->font, strdup("->"), PL_HOT, ap);
 			t->next->next = x;
 		} else {
-			t->next = x->next;
-			x->next = nil;
-			freetext(x);
+			if(x) {
+				t->next = x->next;
+				x->next = nil;
+				freetext(x);
+			}
 		}
 	}
 	updtext(w);
--