manager: abort activation if the device is still unmanaged
unmanaged_to_disconnected() is supposed to mark the device as managed. However, it may easily be unable to do so, for example if the device is unmanaged by NM_UNMANAGED_USER_SETTINGS. Shortly before actually enqueuing the activation request, check and error out. Otherwise, we might hit an assertion later in _device_activate().
This commit is contained in:
@@ -3786,9 +3786,20 @@ _internal_activate_device (NMManager *self, NMActiveConnection *active, GError *
|
||||
}
|
||||
|
||||
/* If the device is there, we can ready it for the activation. */
|
||||
if (nm_device_is_real (device))
|
||||
if (nm_device_is_real (device)) {
|
||||
unmanaged_to_disconnected (device);
|
||||
|
||||
if (!nm_device_get_managed (device, FALSE)) {
|
||||
/* Unexpectedly, the device is still unmanaged. That can happen for example,
|
||||
* if the device is forcibly unmanaged due to NM_UNMANAGED_USER_SETTINGS. */
|
||||
g_set_error_literal (error,
|
||||
NM_MANAGER_ERROR,
|
||||
NM_MANAGER_ERROR_DEPENDENCY_FAILED,
|
||||
"Activation failed because the device is unmanaged");
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Export the new ActiveConnection to clients and start it on the device */
|
||||
active_connection_add (self, active);
|
||||
nm_device_queue_activation (device, NM_ACT_REQUEST (active));
|
||||
|
Reference in New Issue
Block a user