diff options
author | Wen Liang <liangwen12year@gmail.com> | 2023-08-03 10:16:42 -0400 |
---|---|---|
committer | Wen Liang <liangwen12year@gmail.com> | 2023-08-22 12:17:16 -0400 |
commit | b341161e2a4988403ae4a6ef7653e01567da36a0 (patch) | |
tree | 38171c92fd31626685f08a3ab3c4f41834f59599 | |
parent | 52e9600f039da05a5e0cf6d19552cee9fb034bb6 (diff) |
nm-manager: ensure device is exported on D-Bus in authentication requestwl/device_auth_request_fix
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
-rw-r--r-- | src/core/nm-manager.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/core/nm-manager.c b/src/core/nm-manager.c index 2175a9c48f..4fb9194a28 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); |