Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Jan 1996 04:29:47 +1100
From:      Bruce Evans <bde@zeta.org.au>
To:        bde@zeta.org.au, m_tanaka@pa.yokogawa.co.jp, mpp@mpp.minn.net
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: NFS trouble ?
Message-ID:  <199601241729.EAA29129@godzilla.zeta.org.au>

next in thread | raw e-mail | index | archive | help
>>Index: nfs_bio.c
>>===================================================================
>>RCS file: /usr/var/cvs/src/sys/nfs/nfs_bio.c,v
>>retrieving revision 1.21
>>diff -u -r1.21 nfs_bio.c
>>--- nfs_bio.c	1995/12/17 21:12:13	1.21
>>+++ nfs_bio.c	1996/01/23 20:03:38
>>@@ -240,7 +240,8 @@
>> 		 */
>> again:
>> 		bufsize = biosize;
>>-		if ((lbn + 1) * biosize > np->n_size) {
>>+		if ((lbn + 1) * biosize > np->n_size && 
>>+		    (lbn + 1) * biosize - np->n_size < biosize) {
>> 			bufsize = np->n_size - lbn * biosize;
>> 			bufsize = (bufsize + DEV_BSIZE - 1) & ~(DEV_BSIZE - 1);
>> 		}
>>-- 

>I think the changed should be

>>+		if ((off_t)(lbn + 1) * biosize > np->n_size) {

>There are several other similar potentially overflowing multiplications is
>nfs_bio.c.

Oops, it needs your fix too, although it might be better for it to crash
than for it to attempt to copy a 1TB holey file to a 1TB non-holey file.
It will probably do something bad for one of the overflows.  There's
another one visible `(lbn * biosize)' and stupider ones a little later
`diff = np->n_size - uio->uio_offset;' where the LHS has type `int' and
the RHS has type u_quad_t (n_size has type u_quad_t and uio_offset has
type off_t which happens to be quad_t).  Support for >= 2GB files should
be disabled until all the overflows are fixed.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199601241729.EAA29129>