From a6b388d7d5eeeeee77d2a41321969db8add0be54 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 22 Nov 2017 21:39:42 +0100 Subject: [PATCH] device: only set ip_forward sysctl if necessary /proc/sys might be read-only but we want to set it for enabling shared mode. Check first if the sysctl already has the expected value, and if so, do nothing. https://bugzilla.gnome.org/show_bug.cgi?id=790726 (cherry picked from commit d841930d67d7d32468ca33ff03256a7a195e5cf7) --- src/devices/nm-device.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index a638d11f22..9f8bab0ec6 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -8393,7 +8393,9 @@ share_init (NMDevice *self, GError **error) char **iter; int errsv; - if (!nm_platform_sysctl_set (nm_device_get_platform (self), NMP_SYSCTL_PATHID_ABSOLUTE ("/proc/sys/net/ipv4/ip_forward"), "1")) { + if (nm_platform_sysctl_get_int32 (nm_device_get_platform (self), NMP_SYSCTL_PATHID_ABSOLUTE ("/proc/sys/net/ipv4/ip_forward"), -1) == 1) { + /* nothing to do. */ + } else if (!nm_platform_sysctl_set (nm_device_get_platform (self), NMP_SYSCTL_PATHID_ABSOLUTE ("/proc/sys/net/ipv4/ip_forward"), "1")) { errsv = errno; _LOGD (LOGD_SHARING, "share: error enabling IPv4 forwarding: (%d) %s", errsv, g_strerror (errsv)); @@ -8402,7 +8404,9 @@ share_init (NMDevice *self, GError **error) return FALSE; } - if (!nm_platform_sysctl_set (nm_device_get_platform (self), NMP_SYSCTL_PATHID_ABSOLUTE ("/proc/sys/net/ipv4/ip_dynaddr"), "1")) { + if (nm_platform_sysctl_get_int32 (nm_device_get_platform (self), NMP_SYSCTL_PATHID_ABSOLUTE ("/proc/sys/net/ipv4/ip_dynaddr"), -1) == 1) { + /* nothing to do. */ + } else if (!nm_platform_sysctl_set (nm_device_get_platform (self), NMP_SYSCTL_PATHID_ABSOLUTE ("/proc/sys/net/ipv4/ip_dynaddr"), "1")) { errsv = errno; _LOGD (LOGD_SHARING, "share: error enabling dynamic addresses: (%d) %s", errsv, strerror (errsv));