diff --git a/sys/src/9/port/sysproc.c b/sys/src/9/port/sysproc.c index 9f670a5a0..fbad6942f 100644 --- a/sys/src/9/port/sysproc.c +++ b/sys/src/9/port/sysproc.c @@ -1109,13 +1109,15 @@ syssemacquire(ulong *arg) 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 @@ systsemacquire(ulong *arg) 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 @@ syssemrelease(ulong *arg) 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); diff --git a/sys/src/boot/pc/fat.c b/sys/src/boot/pc/fat.c index 7b90234b4..99218d155 100644 --- a/sys/src/boot/pc/fat.c +++ b/sys/src/boot/pc/fat.c @@ -339,7 +339,7 @@ findfat(Fat *fat, int drive, ulong xbase, ulong lba) 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)) diff --git a/sys/src/cmd/mothra/mothra.c b/sys/src/cmd/mothra/mothra.c index c6457f547..29e9219fd 100644 --- a/sys/src/cmd/mothra/mothra.c +++ b/sys/src/cmd/mothra/mothra.c @@ -1016,9 +1016,11 @@ mothon(Www *w, int on) 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);