Skip to content

Commit

Permalink
Ensure null-term of strings in Linux Conn Mger (#17024)
Browse files Browse the repository at this point in the history
* Ensure null-term of strings in Linux Conn Mger

* Guard against oversized SSID/key in Linux Conn Mgr

Also, fix an existing guard.
  • Loading branch information
lzgrablic02 authored Apr 14, 2022
1 parent 3fa7de8 commit 579efb3
Showing 1 changed file with 10 additions and 8 deletions.
18 changes: 10 additions & 8 deletions src/platform/Linux/ConnectivityManagerImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -925,8 +925,12 @@ ConnectivityManagerImpl::ConnectWiFiNetworkAsync(ByteSpan ssid, ByteSpan credent
GVariant * args = nullptr;
GVariantBuilder builder;
gboolean result;
char ssidStr[kMaxWiFiSSIDLength] = { 0 };
char keyStr[kMaxWiFiKeyLength] = { 0 };
char ssidStr[kMaxWiFiSSIDLength + 1u] = { 0 };
char keyStr[kMaxWiFiKeyLength + 1u] = { 0 };

VerifyOrReturnError(ssid.size() <= kMaxWiFiSSIDLength, CHIP_ERROR_INVALID_ARGUMENT);
VerifyOrReturnError(credentials.size() <= kMaxWiFiKeyLength, CHIP_ERROR_INVALID_ARGUMENT);

// There is another ongoing connect request, reject the new one.
VerifyOrReturnError(mpConnectCallback == nullptr, CHIP_ERROR_INCORRECT_STATE);

Expand Down Expand Up @@ -1345,14 +1349,12 @@ CHIP_ERROR ConnectivityManagerImpl::GetConfiguredNetwork(NetworkCommissioning::N
GVariant * ssid = g_variant_lookup_value(properties, "ssid", nullptr);
gsize length;
const gchar * ssidStr = g_variant_get_string(ssid, &length);
if (length > sizeof(network.networkID))
{
return CHIP_ERROR_INTERNAL;
}
// TODO: wpa_supplicant will return ssid with quotes! We should have a better way to get the actual ssid in bytes.
gsize length_actual = length - 2;
VerifyOrReturnError(length_actual <= sizeof(network.networkID), CHIP_ERROR_INTERNAL);
ChipLogDetail(DeviceLayer, "Current connected network: %s", ssidStr);
memcpy(network.networkID, ssidStr + 1, length - 2);
network.networkIDLen = length - 2;
memcpy(network.networkID, ssidStr + 1, length_actual);
network.networkIDLen = length_actual;
return CHIP_NO_ERROR;
}

Expand Down

0 comments on commit 579efb3

Please sign in to comment.