> Date: Mon, 18 Jan 2016 19:12:01 +0100 > From: Stefan Kempf <sisnk...@gmail.com> > > Martin Natano wrote: > > Below the conversion to uiomove() for kern/spec_vnops.c. This diff > > prevents truncation of uio_resid when passed to min(). > > Looks good. Basically the same reasoning as with the cd9660 diff. > > ok?
ok kettenis@ > > Index: kern/spec_vnops.c > > =================================================================== > > RCS file: /cvs/src/sys/kern/spec_vnops.c,v > > retrieving revision 1.84 > > diff -u -p -u -r1.84 spec_vnops.c > > --- kern/spec_vnops.c 5 Dec 2015 10:11:53 -0000 1.84 > > +++ kern/spec_vnops.c 13 Jan 2016 19:12:40 -0000 > > @@ -202,7 +202,8 @@ spec_read(void *v) > > daddr_t bn, nextbn, bscale; > > int bsize; > > struct partinfo dpart; > > - int n, on, majordev; > > + size_t n; > > + int on, majordev; > > int (*ioctl)(dev_t, u_long, caddr_t, int, struct proc *); > > int error = 0; > > > > @@ -243,7 +244,7 @@ spec_read(void *v) > > do { > > bn = btodb(uio->uio_offset) & ~(bscale - 1); > > on = uio->uio_offset % bsize; > > - n = min((bsize - on), uio->uio_resid); > > + n = ulmin((bsize - on), uio->uio_resid); > > if (vp->v_lastr + bscale == bn) { > > nextbn = bn + bscale; > > error = breadn(vp, bn, bsize, &nextbn, &bsize, > > @@ -251,12 +252,12 @@ spec_read(void *v) > > } else > > error = bread(vp, bn, bsize, &bp); > > vp->v_lastr = bn; > > - n = min(n, bsize - bp->b_resid); > > + n = ulmin(n, bsize - bp->b_resid); > > if (error) { > > brelse(bp); > > return (error); > > } > > - error = uiomovei((char *)bp->b_data + on, n, uio); > > + error = uiomove((char *)bp->b_data + on, n, uio); > > brelse(bp); > > } while (error == 0 && uio->uio_resid > 0 && n != 0); > > return (error); > > @@ -290,7 +291,8 @@ spec_write(void *v) > > daddr_t bn, bscale; > > int bsize; > > struct partinfo dpart; > > - int n, on, majordev; > > + size_t n; > > + int on, majordev; > > int (*ioctl)(dev_t, u_long, caddr_t, int, struct proc *); > > int error = 0; > > > > @@ -331,14 +333,14 @@ spec_write(void *v) > > do { > > bn = btodb(uio->uio_offset) & ~(bscale - 1); > > on = uio->uio_offset % bsize; > > - n = min((bsize - on), uio->uio_resid); > > + n = ulmin((bsize - on), uio->uio_resid); > > error = bread(vp, bn, bsize, &bp); > > - n = min(n, bsize - bp->b_resid); > > + n = ulmin(n, bsize - bp->b_resid); > > if (error) { > > brelse(bp); > > return (error); > > } > > - error = uiomovei((char *)bp->b_data + on, n, uio); > > + error = uiomove((char *)bp->b_data + on, n, uio); > > if (n + on == bsize) > > bawrite(bp); > > else > > > > cheers, > > natano > > > >