From 5be0113b0953e109d25f0621be37d58ee85f74d4 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 8 Jun 2020 16:55:03 +0200 Subject: [PATCH 01/31] shared: add nm_utils_buf_utf8safe_escape_cp() helper (cherry picked from commit 393bc8c8f66a852e04e2328675bdb0a26066cd0b) (cherry picked from commit 10b0260d1931a768877da103515c891ee6a7abf9) (cherry picked from commit ff8ba801f32504c87af7a0f977a47d2118898e78) (cherry picked from commit 5838f827072fc774d3efec1b2262a36714543aa9) --- shared/nm-glib-aux/nm-shared-utils.c | 11 +++++++++++ shared/nm-glib-aux/nm-shared-utils.h | 1 + 2 files changed, 12 insertions(+) diff --git a/shared/nm-glib-aux/nm-shared-utils.c b/shared/nm-glib-aux/nm-shared-utils.c index 62753dc06e..c8ba114f8d 100644 --- a/shared/nm-glib-aux/nm-shared-utils.c +++ b/shared/nm-glib-aux/nm-shared-utils.c @@ -2095,6 +2095,17 @@ nm_utils_buf_utf8safe_escape_bytes (GBytes *bytes, NMUtilsStrUtf8SafeFlags flags return nm_utils_buf_utf8safe_escape (p, l, flags, to_free); } +char * +nm_utils_buf_utf8safe_escape_cp (gconstpointer buf, gssize buflen, NMUtilsStrUtf8SafeFlags flags) +{ + const char *s_const; + char *s; + + s_const = nm_utils_buf_utf8safe_escape (buf, buflen, flags, &s); + nm_assert (!s || s == s_const); + return s ?: g_strdup (s_const); +} + /*****************************************************************************/ const char * diff --git a/shared/nm-glib-aux/nm-shared-utils.h b/shared/nm-glib-aux/nm-shared-utils.h index e069366afc..7e83078672 100644 --- a/shared/nm-glib-aux/nm-shared-utils.h +++ b/shared/nm-glib-aux/nm-shared-utils.h @@ -860,6 +860,7 @@ typedef enum { } NMUtilsStrUtf8SafeFlags; const char *nm_utils_buf_utf8safe_escape (gconstpointer buf, gssize buflen, NMUtilsStrUtf8SafeFlags flags, char **to_free); +char *nm_utils_buf_utf8safe_escape_cp (gconstpointer buf, gssize buflen, NMUtilsStrUtf8SafeFlags flags); const char *nm_utils_buf_utf8safe_escape_bytes (GBytes *bytes, NMUtilsStrUtf8SafeFlags flags, char **to_free); gconstpointer nm_utils_buf_utf8safe_unescape (const char *str, gsize *out_len, gpointer *to_free); From 91c0a3eb3465fa0c40493d90ae11e65993a9a828 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Thu, 7 May 2020 09:30:02 +0200 Subject: [PATCH 02/31] ifcfg-rh: check return value of fdopen() Reported by coverity: >>> CID 210222: Null pointer dereferences (NULL_RETURNS) >>> Dereferencing a pointer that might be "NULL" "f" when calling "fseek". Fixes: ac5206aa9c5a ('2007-11-21') (cherry picked from commit 581aa981c27d4bde17eb8772fe92697f586a6ed6) (cherry picked from commit bb40de0ca02e4f41e17d3fdccd0df87c79182bdd) (cherry picked from commit cde95a3c755cc350ea0b9d24f35f88b2b2aad067) (cherry picked from commit 3293ad0fbcf58bb970868fb48b2329253c404282) --- src/settings/plugins/ifcfg-rh/shvar.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/settings/plugins/ifcfg-rh/shvar.c b/src/settings/plugins/ifcfg-rh/shvar.c index d25eb13840..5690a82a4d 100644 --- a/src/settings/plugins/ifcfg-rh/shvar.c +++ b/src/settings/plugins/ifcfg-rh/shvar.c @@ -1421,6 +1421,13 @@ svWriteFile (shvarFile *s, int mode, GError **error) return FALSE; } f = fdopen (tmpfd, "w"); + if (!f) { + errsv = errno; + g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errsv), + "Internal error writing file '%s': %s", + s->fileName, nm_strerror_native (errsv)); + return FALSE; + } fseek (f, 0, SEEK_SET); c_list_for_each (current, &s->lst_head) { const shvarLine *line = c_list_entry (current, shvarLine, lst); From 455371c258ab440a90b8601314c2d33557bfcafa Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Thu, 18 Jun 2020 17:25:42 +0200 Subject: [PATCH 03/31] ifcfg-rh: fix memory leak reading tc filters Fixes: 902bbfdb1878 ('ifcfg-rh: add tc support') (cherry picked from commit 88e8f2829e5f8f3ea78a323e617ae4ca0baa2f02) (cherry picked from commit b1e00a58058378febafa0ec59c82fe14977f7c5f) (cherry picked from commit 7a3f78d7eb81491c7d830c52483ea2c52dd787fe) (cherry picked from commit f59af1021698d85d0ce7370bc6b49957b5ee1aa2) (cherry picked from commit 0d0c324367b96364b0de1b9a30b0afcd9ab3c877) --- src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c index ef234b823e..100b6d64f0 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c @@ -2302,7 +2302,7 @@ make_tc_setting (shvarFile *ifcfg) NMTCTfilter *tfilter = NULL; gs_free char *value_to_free = NULL; const char *value = NULL; - GError *local = NULL; + gs_free_error GError *local = NULL; value = svGetValueStr (ifcfg, numbered_tag (tag, "FILTER", i), &value_to_free); if (!value) From 463519766dc7e74ea93fb556d24a37dc89c36e05 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Sun, 14 Jun 2020 23:44:53 +0200 Subject: [PATCH 04/31] libnm: fix leak in nm_utils_is_json_object() Fixes: 32f78ae6c3ba ('libnm: expose nm_utils_is_json_object() utility function') (cherry picked from commit 1cf11ccbca12b545d6da8e963e9eeab7a2028b1e) (cherry picked from commit 49ec86092b7838bdffcf64ccc232a4b9e5a24562) (cherry picked from commit 7db30ad81187948ab3157805e3b22322f203c8b4) (cherry picked from commit fef7d8467c644147bb2fb6d62219778df18a6244) (cherry picked from commit 106528e829d847de7fa1969cb0f3b086e00fff48) --- libnm-core/nm-utils.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c index c2f038dc80..d5e6949a9e 100644 --- a/libnm-core/nm-utils.c +++ b/libnm-core/nm-utils.c @@ -5814,7 +5814,7 @@ fail: gboolean nm_utils_is_json_object (const char *str, GError **error) { - json_t *json; + nm_auto_decref_json json_t *json = NULL; json_error_t jerror; g_return_val_if_fail (!error || !*error, FALSE); @@ -5851,7 +5851,6 @@ nm_utils_is_json_object (const char *str, GError **error) return FALSE; } - json_decref (json); return TRUE; } From 2dd77af67846dcd18a095e4c1e7abf2b2554c3a6 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 8 Jun 2020 16:55:40 +0200 Subject: [PATCH 05/31] lldp: backslash escape untrusted chassis-id,port-id strings This is a serious issue, because this is not guaranteed to be UTF-8 data. Fixes: 07a9364d9c15 ('device: export list of LLDP neighbors through D-Bus') (cherry picked from commit 8cd9b87c914e82e0e366b64b3b954761ba8135d9) (cherry picked from commit 94f8e9fbdca92b1a1e3706e7653f0a19988336df) (cherry picked from commit 90b1df47541484844eb9d168f0330c76b0de53e9) (cherry picked from commit db7070c59d6bc6417a499a7bb855b76d7c5fcdcb) --- src/devices/nm-lldp-listener.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/devices/nm-lldp-listener.c b/src/devices/nm-lldp-listener.c index f922e00878..09d2091d56 100644 --- a/src/devices/nm-lldp-listener.c +++ b/src/devices/nm-lldp-listener.c @@ -532,7 +532,8 @@ lldp_neighbor_new (sd_lldp_neighbor *neighbor_sd, GError **error) case SD_LLDP_CHASSIS_SUBTYPE_INTERFACE_NAME: case SD_LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED: case SD_LLDP_CHASSIS_SUBTYPE_CHASSIS_COMPONENT: - neigh->chassis_id = g_strndup ((const char *) chassis_id, chassis_id_len); + neigh->chassis_id = nm_utils_buf_utf8safe_escape_cp (chassis_id, chassis_id_len, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL | NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_NON_ASCII) + ?: g_new0 (char, 1); break; case SD_LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS: neigh->chassis_id = nm_utils_hwaddr_ntoa (chassis_id, chassis_id_len); @@ -548,7 +549,8 @@ lldp_neighbor_new (sd_lldp_neighbor *neighbor_sd, GError **error) case SD_LLDP_PORT_SUBTYPE_INTERFACE_NAME: case SD_LLDP_PORT_SUBTYPE_LOCALLY_ASSIGNED: case SD_LLDP_PORT_SUBTYPE_PORT_COMPONENT: - neigh->port_id = strndup ((char *) port_id, port_id_len); + neigh->port_id = nm_utils_buf_utf8safe_escape_cp (port_id, port_id_len, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL | NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_NON_ASCII) + ?: g_new0 (char, 1); break; case SD_LLDP_PORT_SUBTYPE_MAC_ADDRESS: neigh->port_id = nm_utils_hwaddr_ntoa (port_id, port_id_len); From ecfc48eca52e5fefcddc4e0eac8e67f24d7334f0 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 5 Jun 2020 19:55:21 +0200 Subject: [PATCH 06/31] lldp: fix lldp_neighbor_equal() to compare lists of variants Fixes: 6c52d946fc8c ('lldp: add support for management address TLV') (cherry picked from commit 7c0d73d94a2824ef2cddedb100f2c1d47bbd5751) (cherry picked from commit 0426681ab47f2a585c8145903bff3753900d0778) (cherry picked from commit 321f9b51c37490a2eed7722edc7cccfdae0d4be5) (cherry picked from commit 2e9d7c84d692fb48599a2fa0cb2817f8de13c961) --- src/devices/nm-lldp-listener.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/devices/nm-lldp-listener.c b/src/devices/nm-lldp-listener.c index 09d2091d56..a56295a435 100644 --- a/src/devices/nm-lldp-listener.c +++ b/src/devices/nm-lldp-listener.c @@ -400,6 +400,19 @@ lldp_neighbor_equal (LldpNeighbor *a, LldpNeighbor *b) if (!nm_streq (a->attrs[attr_id].v_string, b->attrs[attr_id].v_string)) return FALSE; break; + case LLDP_ATTR_TYPE_ARRAY_OF_VARDICTS: { + NMCListElem *itr_a, *itr_b; + + if (c_list_length (&a->attrs[attr_id].v_variant_list) != c_list_length (&b->attrs[attr_id].v_variant_list)) + return FALSE; + itr_b = c_list_first_entry (&b->attrs[attr_id].v_variant_list, NMCListElem, lst); + c_list_for_each_entry (itr_a, &a->attrs[attr_id].v_variant_list, lst) { + if (!g_variant_equal (itr_a->data, itr_b->data)) + return FALSE; + itr_b = c_list_entry (&itr_b->lst, NMCListElem, lst); + } + break; + } default: nm_assert (a->attrs[attr_id].attr_type == LLDP_ATTR_TYPE_NONE); break; From dc94723ad8f94a03e3bf3c5a12a13a18a14b2e59 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 5 Jun 2020 19:55:21 +0200 Subject: [PATCH 07/31] lldp: fix lldp_neighbor_equal() to compare variants Fixes: 8200078ec5d5 ('lldp: support IEEE 802.3 TLVs') (cherry picked from commit 9b7c5ca12d1c181c5965c8c0856897a6e4eb5d37) (cherry picked from commit 4b84eeba5770903eb00577025393c09cad64a4ad) (cherry picked from commit 739417ab85328b94905207f8a8fd3bf523a7484e) (cherry picked from commit 284e3dd4faa32adedaf0ca235100b39964a30842) --- src/devices/nm-lldp-listener.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/devices/nm-lldp-listener.c b/src/devices/nm-lldp-listener.c index a56295a435..ea48532b92 100644 --- a/src/devices/nm-lldp-listener.c +++ b/src/devices/nm-lldp-listener.c @@ -400,6 +400,10 @@ lldp_neighbor_equal (LldpNeighbor *a, LldpNeighbor *b) if (!nm_streq (a->attrs[attr_id].v_string, b->attrs[attr_id].v_string)) return FALSE; break; + case LLDP_ATTR_TYPE_VARDICT: + if (!g_variant_equal (a->attrs[attr_id].v_variant, b->attrs[attr_id].v_variant)) + return FALSE; + break; case LLDP_ATTR_TYPE_ARRAY_OF_VARDICTS: { NMCListElem *itr_a, *itr_b; From 8d37bb0d3a5b81460300e797ee02f352c1b637ab Mon Sep 17 00:00:00 2001 From: Antonio Cardace Date: Tue, 1 Sep 2020 18:38:45 +0200 Subject: [PATCH 08/31] initrd: fix memory leak Signed-off-by: Antonio Cardace Fixes: 9f9609555d1c ('initrd: add configuration generator') (cherry picked from commit d5c05d07c7aff317284d2d5197d75e0f605b4364) (cherry picked from commit bba54613eb4255166c921844e8b6d2a2bd0000a1) (cherry picked from commit 67bb9896b33d8d7b527ce33919b33456672265d0) (cherry picked from commit 5913e4cee97127eca26c6a74207cbe136fed7333) (cherry picked from commit 9ed8b871bb6468cd018afb2675b85206645776cc) --- shared/nm-glib-aux/nm-macros-internal.h | 8 ++++++++ src/initrd/nm-initrd-generator.c | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/shared/nm-glib-aux/nm-macros-internal.h b/shared/nm-glib-aux/nm-macros-internal.h index ec78ef5854..4c27f70cf8 100644 --- a/shared/nm-glib-aux/nm-macros-internal.h +++ b/shared/nm-glib-aux/nm-macros-internal.h @@ -232,6 +232,14 @@ NM_AUTO_DEFINE_FCN0 (GError *, gs_local_free_error, g_error_free) #define gs_unref_keyfile nm_auto(gs_local_keyfile_unref) NM_AUTO_DEFINE_FCN0 (GKeyFile *, gs_local_keyfile_unref, g_key_file_unref) +/** + * gs_free_option_context: + * + * Call g_option_context_free() on a variable location when it goes out of scope. + */ +#define gs_free_option_context nm_auto(gs_local_option_context) +NM_AUTO_DEFINE_FCN0 (GOptionContext *, gs_local_option_context, g_option_context_free); + /*****************************************************************************/ #include "nm-glib.h" diff --git a/src/initrd/nm-initrd-generator.c b/src/initrd/nm-initrd-generator.c index c916459d5c..6732daa014 100644 --- a/src/initrd/nm-initrd-generator.c +++ b/src/initrd/nm-initrd-generator.c @@ -90,7 +90,7 @@ main (int argc, char *argv[]) { G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &remaining, NULL, NULL }, { NULL } }; - GOptionContext *option_context; + gs_free_option_context GOptionContext *option_context = NULL; GError *error = NULL; int errsv; From 8837bc7fe566776946625e966cfc465c836f191c Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 15 Jan 2020 13:17:53 +0100 Subject: [PATCH 09/31] introspection: belatedly add Wi-Fi P2P peer "Name" property to D-Bus introspection file Fixes: 00e64d13320f ('core/devices: Add P2P Wifi device and peer tracking') (cherry picked from commit 109a6fd5571bf8ca7bef82f86a0bebb2665efe57) (cherry picked from commit 0c6ebcb6ed88f85405c6ddb0507547e0ffe90ac6) (cherry picked from commit 323e8eadf335d0582c10661b90ee453eba7690dd) --- .../org.freedesktop.NetworkManager.WifiP2PPeer.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/introspection/org.freedesktop.NetworkManager.WifiP2PPeer.xml b/introspection/org.freedesktop.NetworkManager.WifiP2PPeer.xml index 9068f071de..693d26b5f0 100644 --- a/introspection/org.freedesktop.NetworkManager.WifiP2PPeer.xml +++ b/introspection/org.freedesktop.NetworkManager.WifiP2PPeer.xml @@ -9,6 +9,15 @@ + + +