Toshaan Bharvani
1 year ago
2 changed files with 121 additions and 0 deletions
@ -0,0 +1,54 @@
@@ -0,0 +1,54 @@
|
||||
From 6302c2ea52c6c28d36b6006b29823c469e171e2a Mon Sep 17 00:00:00 2001 |
||||
From: Wen Liang <liangwen12year@gmail.com> |
||||
Date: Thu, 3 Aug 2023 10:16:42 -0400 |
||||
Subject: [PATCH] nm-manager: ensure device is exported on D-Bus in |
||||
authentication request |
||||
|
||||
The device authentication request is an async process, it can not know |
||||
the answer right away, it is not guarantee that device is still |
||||
exported on D-Bus when authentication finishes. Thus, do not return |
||||
SUCCESS and abort the authentication request when device is not alive. |
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2210271 |
||||
(cherry picked from commit b341161e2a4988403ae4a6ef7653e01567da36a0) |
||||
(cherry picked from commit 0e27e84247ed824b27d105292d7bf42dc0341cbb) |
||||
--- |
||||
src/core/nm-manager.c | 15 +++++++++++++++ |
||||
1 file changed, 15 insertions(+) |
||||
|
||||
diff --git a/src/core/nm-manager.c b/src/core/nm-manager.c |
||||
index 9c7212202b..937acbba1e 100644 |
||||
--- a/src/core/nm-manager.c |
||||
+++ b/src/core/nm-manager.c |
||||
@@ -3222,6 +3222,13 @@ device_auth_done_cb(NMAuthChain *chain, GDBusMethodInvocation *context, gpointer |
||||
nm_assert(error || (result == NM_AUTH_CALL_RESULT_YES)); |
||||
} |
||||
|
||||
+ if (!error && !nm_dbus_object_is_exported(NM_DBUS_OBJECT(device))) { |
||||
+ g_set_error(&error, |
||||
+ NM_MANAGER_ERROR, |
||||
+ NM_MANAGER_ERROR_UNKNOWN_DEVICE, |
||||
+ "device no longer exists"); |
||||
+ } |
||||
+ |
||||
callback(device, context, subject, error, nm_auth_chain_get_data(chain, "user-data")); |
||||
} |
||||
|
||||
@@ -3287,6 +3294,14 @@ nm_manager_device_auth_request(NMManager *self, |
||||
&error)) |
||||
goto fail_on_idle; |
||||
|
||||
+ if (!nm_dbus_object_is_exported(NM_DBUS_OBJECT(device))) { |
||||
+ g_set_error(&error, |
||||
+ NM_MANAGER_ERROR, |
||||
+ NM_MANAGER_ERROR_UNKNOWN_DEVICE, |
||||
+ "device no longer exists"); |
||||
+ goto fail_on_idle; |
||||
+ } |
||||
+ |
||||
chain = nm_auth_chain_new_subject(subject, context, device_auth_done_cb, self); |
||||
if (cancellable) |
||||
nm_auth_chain_set_cancellable(chain, cancellable); |
||||
-- |
||||
2.41.0 |
||||
|
@ -0,0 +1,67 @@
@@ -0,0 +1,67 @@
|
||||
From d9b3114b6ef8e0f4d50a8d56d750a698d85fa984 Mon Sep 17 00:00:00 2001 |
||||
From: Gris Ge <fge@redhat.com> |
||||
Date: Tue, 29 Aug 2023 08:25:23 +0800 |
||||
Subject: [PATCH] checkpoint: Fix segfault crash when rollback |
||||
|
||||
When rolling back a checkpoint, NM will crash due to dereference a NULL |
||||
pointer of `priv->removed_devices->len`. |
||||
|
||||
To fix it, we just place a NULL check before that code block. |
||||
|
||||
Fixes: 1f1b71ad9f8a ('checkpoint: preserve devices that were removed and |
||||
readded') |
||||
|
||||
Reference: https://issues.redhat.com/browse/RHEL-1526 |
||||
|
||||
Signed-off-by: Gris Ge <fge@redhat.com> |
||||
(cherry picked from commit 3162507d6ca381cfbe02ceba2d80ba0f3ba3e5f7) |
||||
(cherry picked from commit e5600d4c5a33749939b984184f27fbe4159a2b65) |
||||
--- |
||||
src/core/nm-checkpoint.c | 23 +++++++++++++---------- |
||||
1 file changed, 13 insertions(+), 10 deletions(-) |
||||
|
||||
diff --git a/src/core/nm-checkpoint.c b/src/core/nm-checkpoint.c |
||||
index 5c4d4e53d6..74adf48477 100644 |
||||
--- a/src/core/nm-checkpoint.c |
||||
+++ b/src/core/nm-checkpoint.c |
||||
@@ -460,24 +460,27 @@ next_dev: |
||||
NMDeviceState state; |
||||
|
||||
nm_manager_for_each_device (priv->manager, device, tmp_lst) { |
||||
- gboolean found = FALSE; |
||||
- |
||||
if (g_hash_table_contains(priv->devices, device)) |
||||
continue; |
||||
|
||||
/* Also ignore devices that were in the checkpoint initially and |
||||
* were moved to 'removed_devices' because they got removed from |
||||
* the system. */ |
||||
- for (i = 0; i < priv->removed_devices->len; i++) { |
||||
- dev_checkpoint = priv->removed_devices->pdata[i]; |
||||
- if (dev_checkpoint->dev_type == nm_device_get_device_type(device) |
||||
- && nm_streq0(dev_checkpoint->original_dev_name, nm_device_get_iface(device))) { |
||||
- found = TRUE; |
||||
- break; |
||||
+ if (priv->removed_devices) { |
||||
+ gboolean found = FALSE; |
||||
+ |
||||
+ for (i = 0; i < priv->removed_devices->len; i++) { |
||||
+ dev_checkpoint = priv->removed_devices->pdata[i]; |
||||
+ if (dev_checkpoint->dev_type == nm_device_get_device_type(device) |
||||
+ && nm_streq0(dev_checkpoint->original_dev_name, |
||||
+ nm_device_get_iface(device))) { |
||||
+ found = TRUE; |
||||
+ break; |
||||
+ } |
||||
} |
||||
+ if (found) |
||||
+ continue; |
||||
} |
||||
- if (found) |
||||
- continue; |
||||
|
||||
state = nm_device_get_state(device); |
||||
if (state > NM_DEVICE_STATE_DISCONNECTED && state < NM_DEVICE_STATE_DEACTIVATING) { |
||||
-- |
||||
2.41.0 |
||||
|
Loading…
Reference in new issue