Message ID | 20231115000547.1139157-1-denkenz@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [1/3] netdev: Remove improper use of netdev_connect_failed | expand |
Context | Check | Description |
---|---|---|
tedd_an/pre-ci_am | success | Success |
prestwoj/iwd-alpine-ci-fetch | success | Fetch PR |
prestwoj/iwd-ci-gitlint | success | GitLint |
prestwoj/iwd-ci-fetch | success | Fetch PR |
prestwoj/iwd-alpine-ci-makedistcheck | success | Make Distcheck |
prestwoj/iwd-alpine-ci-build | success | Build - Configure |
prestwoj/iwd-ci-makedistcheck | success | Make Distcheck |
prestwoj/iwd-ci-build | success | Build - Configure |
prestwoj/iwd-alpine-ci-makecheckvalgrind | success | Make Check w/Valgrind |
prestwoj/iwd-alpine-ci-makecheck | success | Make Check |
prestwoj/iwd-ci-clang | success | clang PASS |
prestwoj/iwd-ci-makecheckvalgrind | success | Make Check w/Valgrind |
prestwoj/iwd-ci-makecheck | success | Make Check |
prestwoj/iwd-alpine-ci-incremental_build | success | Incremental Build with patches |
prestwoj/iwd-ci-incremental_build | success | Incremental Build with patches |
prestwoj/iwd-ci-testrunner | success | test-runner PASS |
On 11/14/23 18:05, Denis Kenzior wrote: > When a roam event is received, iwd generates a firmware scan request and > notifies its event filter of the ROAMING condition. In cases where the > firmware scan could not be started successfully, netdev_connect_failed > is invoked. This is not a correct use of netev_connect_failed since it > doesn't actually disconnect the underlying netdev and the reflected > state becomes de-synchronized from the underlying kernel device. > > The firmware scan request could currently fail for two reasons: > 1. nl80211 genl socket is in a bad state, or > 2. the scan context does not exist > > Since both reasons are highly unlikely, simply use L_WARN instead. > > The other two cases where netdev_connect_failed is used could only occur > if the kernel message is invalid. The message is ignored in that case > and a warning is printed. > > The situation described above also exists in netdev_get_fw_scan_cb. If > the scan could not be completed successfully, there's not much iwd can > do to recover. Have iwd remain in roaming state and print an error. > --- > src/netdev.c | 35 +++++++++++------------------------ > 1 file changed, 11 insertions(+), 24 deletions(-) > All applied. Regards, -Denis
diff --git a/src/netdev.c b/src/netdev.c index ffd903740dd9..4a418b60abcf 100644 --- a/src/netdev.c +++ b/src/netdev.c @@ -4934,7 +4934,7 @@ static bool netdev_get_fw_scan_cb(int err, struct l_queue *bss_list, if (err < 0) { l_error("Failed to get scan after roam (%d)", err); - goto failed; + return false; } /* @@ -4946,7 +4946,7 @@ static bool netdev_get_fw_scan_cb(int err, struct l_queue *bss_list, if (!bss) { l_error("Roam target BSS not found in scan results"); - goto failed; + return false; } netdev->fw_roam_bss = bss; @@ -4958,16 +4958,9 @@ static bool netdev_get_fw_scan_cb(int err, struct l_queue *bss_list, return false; } - if (netdev->sm) { - if (!eapol_start(netdev->sm)) - goto failed; - } - - return false; + if (netdev->sm) + L_WARN_ON(!eapol_start(netdev->sm)); -failed: - netdev_connect_failed(netdev, NETDEV_RESULT_ABORTED, - MMPDU_REASON_CODE_UNSPECIFIED); return false; } @@ -4998,8 +4991,8 @@ static void netdev_roam_event(struct l_genl_msg *msg, struct netdev *netdev) netdev->operational = false; - if (!l_genl_attr_init(&attr, msg)) - goto failed; + if (L_WARN_ON(!l_genl_attr_init(&attr, msg))) + return; while (l_genl_attr_next(&attr, &type, &len, &data)) { switch (type) { @@ -5014,7 +5007,7 @@ static void netdev_roam_event(struct l_genl_msg *msg, struct netdev *netdev) if (!mac) { l_error("Failed to parse ATTR_MAC from CMD_ROAM"); - goto failed; + return; } /* Handshake completed in firmware, just get the roamed BSS */ @@ -5031,20 +5024,14 @@ static void netdev_roam_event(struct l_genl_msg *msg, struct netdev *netdev) get_fw_scan: handshake_state_set_authenticator_address(netdev->handshake, mac); - if (!scan_get_firmware_scan(netdev->wdev_id, netdev_get_fw_scan_cb, - netdev, NULL)) - goto failed; + if (L_WARN_ON(!scan_get_firmware_scan(netdev->wdev_id, + netdev_get_fw_scan_cb, + netdev, NULL))) + return; if (netdev->event_filter) netdev->event_filter(netdev, NETDEV_EVENT_ROAMING, NULL, netdev->user_data); - - return; -failed: - l_error("Failed to properly handle the ROAM event -- submit logs!"); - netdev_connect_failed(netdev, NETDEV_RESULT_ABORTED, - MMPDU_REASON_CODE_UNSPECIFIED); - } static void netdev_send_sa_query_delay(struct l_timeout *timeout,