mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-12 11:10:31 +01:00
core: fix crash when reloading global dns configuration
When reloading the configuration and there is a global DNS
configuration without domains, NM crashes in global_dns_equal()
because `old->domains` and `new->domains` are both NULL. Fix that.
Thread 1 "NetworkManager" received signal SIGTRAP, Trace/breakpoint trap.
0 g_logv (log_domain=0x7fe81a2110be "GLib", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=<optimized out>) at ../glib/gmessages.c:1433
1 g_log (log_domain=<optimized out>, log_level=<optimized out>, format=<optimized out>) at ../glib/gmessages.c:1471
2 g_hash_table_size (hash_table=<optimized out>) at ../glib/ghash.c:2183
3 g_hash_table_size (hash_table=<optimized out>) at ../glib/ghash.c:2181
4 global_dns_equal (new=0xecc540, old=0xe618e0) at ../src/core/nm-config-data.c:1466
5 nm_config_data_diff (old_data=old_data@entry=0xe60020, new_data=new_data@entry=0xe606a0) at ../src/core/nm-config-data.c:1946
6 _set_config_data (self=0xe45810, new_data=0xe606a0, reload_flags=NM_CONFIG_CHANGE_CAUSE_SIGHUP) at ../src/core/nm-config.c:2923
7 nm_config_reload (self=0xe45810, reload_flags=NM_CONFIG_CHANGE_CAUSE_SIGHUP, emit_warnings=emit_warnings@entry=1) at ../src/core/nm-config.c:2875
8 nm_main_config_reload (signal=<optimized out>) at ../src/core/main.c:141
9 sighup_handler (user_data=<optimized out>) at ../src/core/main-utils.c:26
10 g_main_dispatch (context=0xe619e0) at ../glib/gmain.c:3444
11 g_main_context_dispatch (context=0xe619e0) at ../glib/gmain.c:4162
12 g_main_context_iterate.constprop.0 (context=0xe619e0, block=1, dispatch=1, self=<optimized out>) at ../glib/gmain.c:4238
13 g_main_loop_run (loop=0xe5e310) at ../glib/gmain.c:4438
14 main (argc=<optimized out>, argv=<optimized out>) at ../src/core/main.c:515
Fixes: 1f0d1d78d2 ('dns-manager: always apply options from [global-dns]')
This commit is contained in:
parent
308e224e8e
commit
ba4a9ea79a
1 changed files with 13 additions and 11 deletions
|
|
@ -1463,21 +1463,23 @@ global_dns_equal(NMGlobalDnsConfig *old, NMGlobalDnsConfig *new)
|
|||
if ((!old->domains || !new->domains) && old->domains != new->domains)
|
||||
return FALSE;
|
||||
|
||||
if (g_hash_table_size(old->domains) != g_hash_table_size(new->domains))
|
||||
if (nm_g_hash_table_size(old->domains) != nm_g_hash_table_size(new->domains))
|
||||
return FALSE;
|
||||
|
||||
g_hash_table_iter_init(&iter, old->domains);
|
||||
while (g_hash_table_iter_next(&iter, &key, &value_old)) {
|
||||
value_new = g_hash_table_lookup(new->domains, key);
|
||||
if (!value_new)
|
||||
return FALSE;
|
||||
if (old->domains) {
|
||||
g_hash_table_iter_init(&iter, old->domains);
|
||||
while (g_hash_table_iter_next(&iter, &key, &value_old)) {
|
||||
value_new = g_hash_table_lookup(new->domains, key);
|
||||
if (!value_new)
|
||||
return FALSE;
|
||||
|
||||
domain_old = value_old;
|
||||
domain_new = value_new;
|
||||
domain_old = value_old;
|
||||
domain_new = value_new;
|
||||
|
||||
if (!nm_strv_equal(domain_old->options, domain_new->options)
|
||||
|| !nm_strv_equal(domain_old->servers, domain_new->servers))
|
||||
return FALSE;
|
||||
if (!nm_strv_equal(domain_old->options, domain_new->options)
|
||||
|| !nm_strv_equal(domain_old->servers, domain_new->servers))
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue