From 02a7d287a2f48d1a130773559be6fe4b5a9250c0 Mon Sep 17 00:00:00 2001 From: tjr Date: Sat, 5 Jun 2004 02:18:28 +0000 Subject: Change the types of vn_rdwr_inchunks()'s len and aresid arguments to size_t and size_t *, respectively. Update callers for the new interface. This is a better fix for overflows that occurred when dumping segments larger than 2GB to core files. --- sys/kern/vfs_vnops.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'sys/kern/vfs_vnops.c') diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index 4091130..d2438bb 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -461,16 +461,17 @@ vn_rdwr_inchunks(rw, vp, base, len, offset, segflg, ioflg, active_cred, enum uio_rw rw; struct vnode *vp; caddr_t base; - int len; + size_t len; off_t offset; enum uio_seg segflg; int ioflg; struct ucred *active_cred; struct ucred *file_cred; - int *aresid; + size_t *aresid; struct thread *td; { int error = 0; + int iaresid; do { int chunk; @@ -487,8 +488,9 @@ vn_rdwr_inchunks(rw, vp, base, len, offset, segflg, ioflg, active_cred, chunk = len; if (rw != UIO_READ && vp->v_type == VREG) bwillwrite(); + iaresid = 0; error = vn_rdwr(rw, vp, base, chunk, offset, segflg, - ioflg, active_cred, file_cred, aresid, td); + ioflg, active_cred, file_cred, &iaresid, td); len -= chunk; /* aresid calc already includes length */ if (error) break; @@ -497,7 +499,7 @@ vn_rdwr_inchunks(rw, vp, base, len, offset, segflg, ioflg, active_cred, uio_yield(); } while (len); if (aresid) - *aresid += len; + *aresid = len + iaresid; return (error); } -- cgit v1.1