summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2017-04-03 00:46:32 +0000
committerglebius <glebius@FreeBSD.org>2017-04-03 00:46:32 +0000
commitf03cd44ca41ffaacbad1f0958f1ccae209f60e4e (patch)
tree5398d4a4cf9f338611e8838647dc45acfe446acc /sys/kern
parentd0d6fbc7a4cba03b52d9d92509a75dae4fcf5907 (diff)
downloadFreeBSD-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.c7
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;
}
}
OpenPOWER on IntegriCloud