Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dec38700 authored by Ye Jiao's avatar Ye Jiao Committed by Mahesh KKV
Browse files

Fix multi-link llstat parsing in wifi legacy hal

Multi-link llstat parsing codes in wifi legacy hal, specifically
'copyLinkStat' and 'copyPeerInfo', pass the output container parameter
'std::vector<>' by value instead of by reference. The result is the
copied 'LinkStats' list and 'WifiPeerInfo' list are discarded when
'copyLinkStat' and 'copyPeerInfo' return. The empty links list are
passed to framework and fails validity check in Wi-Fi framework and
leads to system server crash.

Fix this issue by passing 'stats' and 'peers' by reference.

Bug: 269049672
Test: Manual Test with multi-link llstat implementation integrated
Change-Id: If8c366213af2ffcb9f7b3c904e1541ed0ac2fea4
parent feec85fc
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -745,7 +745,7 @@ wifi_error WifiLegacyHal::disableLinkLayerStats(const std::string& iface_name) {

// Copies wifi_peer_info* to vector<WifiPeerInfo> and returns poiner to next element.
wifi_peer_info* WifiLegacyHal::copyPeerInfo(wifi_peer_info* peer_ptr,
                                            std::vector<WifiPeerInfo> peers) {
                                            std::vector<WifiPeerInfo>& peers) {
    WifiPeerInfo peer;
    peer.peer_info = *peer_ptr;
    if (peer_ptr->num_rate > 0) {
@@ -761,7 +761,7 @@ wifi_peer_info* WifiLegacyHal::copyPeerInfo(wifi_peer_info* peer_ptr,
}
// Copies wifi_link_stat* to vector<LinkStats> and returns poiner to next element.
wifi_link_stat* WifiLegacyHal::copyLinkStat(wifi_link_stat* stat_ptr,
                                            std::vector<LinkStats> stats) {
                                            std::vector<LinkStats>& stats) {
    LinkStats linkStat;
    linkStat.stat = *stat_ptr;
    wifi_peer_info* l_peer_info_stats_ptr = stat_ptr->peer_info;
+2 −2
Original line number Diff line number Diff line
@@ -782,8 +782,8 @@ class WifiLegacyHal {
    // Handles wifi (error) status of Virtual interface create/delete
    wifi_error handleVirtualInterfaceCreateOrDeleteStatus(const std::string& ifname,
                                                          wifi_error status);
    wifi_link_stat* copyLinkStat(wifi_link_stat* stat_ptr, std::vector<LinkStats> stats);
    wifi_peer_info* copyPeerInfo(wifi_peer_info* peer_ptr, std::vector<WifiPeerInfo> peers);
    wifi_link_stat* copyLinkStat(wifi_link_stat* stat_ptr, std::vector<LinkStats>& stats);
    wifi_peer_info* copyPeerInfo(wifi_peer_info* peer_ptr, std::vector<WifiPeerInfo>& peers);

    // Global function table of legacy HAL.
    wifi_hal_fn global_func_table_;