NFS: file too large
Matthew Dillon
dillon at apollo.backplane.com
Wed Jan 19 04:25:22 UTC 2011
:Well, since a server specifies the maximum file size it can
:handle, it seems good form to check for that in the client.
:(Although I'd agree that a server shouldn't crash if a read/write
: that goes beyond that limit.)
:
:Also, as Matt notes, off_t is signed. As such, it looks to me like
:the check could mess up if uio_offset it right near 0x7fffffffffffffff,
:so that uio->ui_offset + uio->uio_resid ends up negative. I think the
:check a little above that for uio_offset < 0 should also check
:uio_offset + uio_resid < 0 to avoid this.
:
:rick
Yes, though doing an overflow check in C, at least with newer versions
of GCC, requires a separate comparison. The language has been mangled
pretty badly over the years.
if (a + b < a) -> can be optimized-out by the compiler
if (a + b < 0) -> also can be optimized-out by the compiler
x = a + b;
if (x < a) -> this is ok (best method)
x = a + b;
if (x < 0) -> this is ok
This sort of check may already be made in various places (e.g. by UFS
and/or uio), since negative offsets are used to identify meta-data in
UFS.
-Matt
Matthew Dillon
<dillon at backplane.com>
More information about the freebsd-hackers
mailing list