diff options
author | glebius <glebius@FreeBSD.org> | 2017-04-03 00:46:32 +0000 |
---|---|---|
committer | glebius <glebius@FreeBSD.org> | 2017-04-03 00:46:32 +0000 |
commit | f03cd44ca41ffaacbad1f0958f1ccae209f60e4e (patch) | |
tree | 5398d4a4cf9f338611e8838647dc45acfe446acc /sys/kern | |
parent | d0d6fbc7a4cba03b52d9d92509a75dae4fcf5907 (diff) | |
download | FreeBSD-src-f03cd44ca41ffaacbad1f0958f1ccae209f60e4e.zip FreeBSD-src-f03cd44ca41ffaacbad1f0958f1ccae209f60e4e.tar.gz |
Merge r315910:
Make sendfile(2) more robust against file change. This fixes a possible
crash when the file shrinks. This also fixes sendfile(2) not sending more
data in a case when the file grows, and the request is open-ended or
specifies a size that is greater than old file size.
PR: 217789
Reviewed by: gallatin
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/kern_sendfile.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/sys/kern/kern_sendfile.c b/sys/kern/kern_sendfile.c index cbcd826..5784d14 100644 --- a/sys/kern/kern_sendfile.c +++ b/sys/kern/kern_sendfile.c @@ -681,11 +681,10 @@ retry_space: goto done; } if (va.va_size != obj_size) { - if (nbytes == 0) - rem += va.va_size - obj_size; - else if (offset + nbytes > va.va_size) - rem -= (offset + nbytes - va.va_size); obj_size = va.va_size; + rem = nbytes ? + omin(nbytes + offset, obj_size) : obj_size; + rem -= off; } } |