mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-07 21:50:18 +01:00
auth-manager: fix potential issue iterating modified CList in _dbus_new_proxy_cb()
In the loop, we invoke callbacks. What the callbacks do, is out of control
of NMAuthManager. For example, they could cancel or schedule new
requests. Especially, cancelling invalidate the stored @safe pointer.
Fix that, by always iterate from the start of the list.
Fixes: d0563f0733
This commit is contained in:
parent
0fa57069ad
commit
a99d51cb50
1 changed files with 4 additions and 2 deletions
|
|
@ -500,7 +500,7 @@ _dbus_new_proxy_cb (GObject *source_object,
|
|||
NMAuthManagerPrivate *priv;
|
||||
gs_free GError *error = NULL;
|
||||
GDBusProxy *proxy;
|
||||
NMAuthManagerCallId *call_id, *safe;
|
||||
NMAuthManagerCallId *call_id;
|
||||
|
||||
proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
|
||||
|
||||
|
|
@ -516,10 +516,12 @@ _dbus_new_proxy_cb (GObject *source_object,
|
|||
if (!priv->proxy) {
|
||||
_LOGE ("could not create polkit proxy: %s", error->message);
|
||||
|
||||
c_list_for_each_entry_safe (call_id, safe, &priv->calls_lst_head, calls_lst) {
|
||||
again:
|
||||
c_list_for_each_entry (call_id, &priv->calls_lst_head, calls_lst) {
|
||||
if (call_id->dbus_parameters) {
|
||||
_LOG2T (call_id, "completed: failed due to no D-Bus proxy after startup");
|
||||
_call_id_invoke_callback (call_id, FALSE, FALSE, error);
|
||||
goto again;
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue