Date: Tue, 23 Jan 1996 14:22:58 -0600 (CST) From: "Mike Pritchard" <mpp@mpp.minn.net> To: m_tanaka@pa.yokogawa.co.jp (Mihoko Tanaka) Cc: freebsd-hackers@freebsd.org Subject: Re: NFS trouble ? Message-ID: <199601232022.OAA00356@mpp.minn.net> In-Reply-To: <9601231404.AA28044@cabbage.pa.yokogawa.co.jp> from "Mihoko Tanaka" at Jan 23, 96 11:04:54 pm
next in thread | previous in thread | raw e-mail | index | archive | help
Mihoko Tanaka wrote:
>
> Hello All,
>
> My friend is developping a program which seek a file and read it.
> Her program seeks a file with a wrong offset (i.e the offset size is larger
> than the file size). It occurs panic.
>
> When a file is on a local disk, nothing happens.
> But when a file is on NFS, it occurs panic everytime.
>
> She use FreeBSD-2.1.0R.
The problem also exists under FreeBSD-current. The problem is that
nfs_bio winds up doing a bogus computation when the current file
offset is more than a block beyond the end of the file, and it winds
up trying to read up a few terabytes of buffer memory.
If someone would review the attached patch at the end of this
message, I'll go commit it.
> then
> off_t offset = 0x90000000 > 0
>
> I guess that lseek should return a error (EINVAL) when 'offset' is
> larger then the file size .
> What do you think ?
No, seeking past the end of the file a perfectly valid. The lseek
man page explains this.
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);
}
--
Mike Pritchard
mpp@minn.net
"Go that way. Really fast. If something gets in your way, turn"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199601232022.OAA00356>
