From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mimir.eigenstate.org ([206.124.132.107]) by ewsd; Sun Apr 5 22:02:22 EDT 2020 Received: from abbatoir.fios-router.home (pool-162-83-132-245.nycmny.fios.verizon.net [162.83.132.245]) by mimir.eigenstate.org (OpenSMTPD) with ESMTPSA id 331d85cd (TLSv1.2:ECDHE-RSA-AES256-SHA:256:NO); Sun, 5 Apr 2020 19:02:07 -0700 (PDT) Message-ID: To: alex@musolino.id.au, 9front@9front.org Subject: Re: [9front] dossrv: Some error checking. Date: Sun, 5 Apr 2020 19:02:06 -0700 From: ori@eigenstate.org In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: converged scale-out GPU TOR over XMPP out-scaling database-scale solution >> @@ -1683,8 +1686,7 @@ >> { >> Dosbpb *bp = xf->ptr; >> Iosect *p; >> - int n, i; >> - vlong k; >> + int n, i, k; >> >> n = bp->freeptr; >> for(;;){ > > Is this part intentional? Now with the merge issue fixed, and errno set instead of werrstr: diff -r ed9a8f50c08f sys/src/cmd/dossrv/dosfs.c --- a/sys/src/cmd/dossrv/dosfs.c Sun Apr 05 03:46:47 2020 +0200 +++ b/sys/src/cmd/dossrv/dosfs.c Sun Apr 05 19:01:41 2020 -0700 @@ -550,7 +550,7 @@ /* * wipe out a dos directory entry */ -static void +static int doremove(Xfs *xf, Dosptr *dp) { Iosect *p; @@ -565,6 +565,8 @@ } if(prevdo < 0 && dp->prevaddr != -1){ p = getsect(xf, dp->prevaddr); + if(p == nil) + return -1; for(prevdo = ((Dosbpb*)xf->ptr)->sectsize-DOSDIRSIZE; prevdo >= 0; prevdo -= DOSDIRSIZE){ if(p->iobuf[prevdo+11] != 0xf) break; @@ -572,7 +574,8 @@ p->flags |= BMOD; } putsect(p); - } + } + return 0; } void @@ -601,8 +604,7 @@ * or it's a read only file in the root directory */ parp = getsect(f->xf, dp->paddr); - if(parp == nil - || getfile(f) < 0){ + if(parp == nil || getfile(f) < 0){ errno = Eio; goto out; } @@ -617,7 +619,10 @@ errno = Eio; goto out; } - doremove(f->xf, f->ptr); + if(doremove(f->xf, f->ptr) == -1){ + errno = Eio; + goto out; + } if(!isroot(dp->paddr)){ puttime(pard, 0); parp->flags |= BMOD; diff -r ed9a8f50c08f sys/src/cmd/dossrv/dossubs.c --- a/sys/src/cmd/dossrv/dossubs.c Sun Apr 05 03:46:47 2020 +0200 +++ b/sys/src/cmd/dossrv/dossubs.c Sun Apr 05 19:01:41 2020 -0700 @@ -1000,6 +1000,8 @@ c = count; if(c == bp->sectsize){ p = getosect(xf, addr); + if(p == nil) + return -1; p->flags = 0; }else{ p = getsect(xf, addr); @@ -1632,7 +1634,8 @@ if(rp == nil) return -1; wp = getosect(xf, ws); - assert(wp != nil); + if(wp == nil) + return -1; memmove(wp->iobuf, rp->iobuf, bp->sectsize); wp->flags = BMOD; putsect(rp); @@ -1702,6 +1705,8 @@ k = clust2sect(bp, n); for(i=0; iclustsize; i++){ p = getosect(xf, k+i); + if(p == nil) + return -1; memset(p->iobuf, 0, bp->sectsize); p->flags = BMOD; putsect(p); diff -r ed9a8f50c08f sys/src/cmd/dossrv/iotrack.c --- a/sys/src/cmd/dossrv/iotrack.c Sun Apr 05 03:46:47 2020 +0200 +++ b/sys/src/cmd/dossrv/iotrack.c Sun Apr 05 19:01:41 2020 -0700 @@ -39,8 +39,11 @@ int toff; Iosect *p; - if(addr < 0) + if(addr < 0){ + chat("invalid address\n"); + errno = Eio; return nil; + } toff = addr % Sect2trk; taddr = addr - toff; t = getiotrack(xf, taddr); @@ -53,8 +56,10 @@ } t->ref++; p = t->tp->p[toff]; - if(p == 0){ + if(p == nil){ p = newsect(); + if(p == nil) + return nil; t->tp->p[toff] = p; p->flags = t->flags&BSTALE; p->lock.key = 0; @@ -196,10 +201,10 @@ t->flags &= ~BSTALE; } if(devwrite(t->xf, t->addr, t->tp->buf, Trksize) < 0){ - chat("error]"); + chat("error]\n"); return -1; } - chat(" done]"); + chat(" done]\n"); return 0; } @@ -304,6 +309,8 @@ else p = malloc(sizeof(Iosect)); unmlock(&freelock); + if(p == nil) + return nil; p->next = 0; return p; }