From 70ebdc77307d9710673d83e52ea5a13480f8988a Mon Sep 17 00:00:00 2001 From: Alexey Kodanev Date: Wed, 11 Dec 2019 18:55:07 +0300 Subject: [PATCH] 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 --- src/nm-manager.c | 6 +++--- 1 file 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);