summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Kodanev <alexey.kodanev@oracle.com>2019-12-11 18:55:07 +0300
committerThomas Haller <thaller@redhat.com>2019-12-12 08:07:20 +0100
commit70ebdc77307d9710673d83e52ea5a13480f8988a (patch)
treeffaeb90b838342487ffefbb24cd43586190e41ec
parentf2dbf8fbc0efd3853100c6e7d7187d649e792793 (diff)
downloadNetworkManager-70ebdc77307d9710673d83e52ea5a13480f8988a.tar.gz
nm-manager: restore passing correct size to sendfile in copy_lease()
Otherwise sendfile() fails with EINVAL when the file offset is greater than zero (pos + size > max), always on the second iteration. Fixes: 0c6cd07ec81d ('nm-manager: remove lease file if copying dhclient lease fails') https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/359
-rw-r--r--src/nm-manager.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/nm-manager.c b/src/nm-manager.c
index 3150aefd9a..b1810474b0 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -2700,7 +2700,7 @@ copy_lease (const char *src, const char *dst)
{
nm_auto_close int src_fd = -1;
int dst_fd;
- ssize_t res;
+ ssize_t res, size = SSIZE_MAX;
src_fd = open (src, O_RDONLY|O_CLOEXEC);
if (src_fd < 0)
@@ -2710,8 +2710,8 @@ copy_lease (const char *src, const char *dst)
if (dst_fd < 0)
return FALSE;
- while ((res = sendfile (dst_fd, src_fd, NULL, G_MAXSSIZE)) > 0) {
- }
+ while ((res = sendfile (dst_fd, src_fd, NULL, size)) > 0)
+ size -= res;
nm_close (dst_fd);