qcacld-3.0: reduce stack frame size for __wlan_hdd_cfg80211_get_wifi_info
Encountered build failure as below: error: stack frame size (2480) exceeds limit (2048) in 'wlan_hdd_cfg80211_get_wifi_info' [-Werror,-Wframe-larger-than] To fix it, allocate the buffer for firmware version dynamically. Change-Id: If768d4eccf5c6e85735c3bf3afaaf47759f0d40e CRs-Fixed: 3343984
This commit is contained in:

committed by
Madan Koyyalamudi

vanhempi
07dcce718b
commit
3e2d8bbb7d
@@ -7252,8 +7252,7 @@ __wlan_hdd_cfg80211_get_wifi_info(struct wiphy *wiphy,
|
||||
{
|
||||
struct hdd_context *hdd_ctx = wiphy_priv(wiphy);
|
||||
struct nlattr *tb_vendor[QCA_WLAN_VENDOR_ATTR_WIFI_INFO_GET_MAX + 1];
|
||||
tSirVersionString driver_version;
|
||||
tSirVersionString firmware_version;
|
||||
uint8_t *firmware_version = NULL;
|
||||
int status;
|
||||
struct sk_buff *reply_skb;
|
||||
uint32_t skb_len = 0, count = 0;
|
||||
@@ -7281,9 +7280,7 @@ __wlan_hdd_cfg80211_get_wifi_info(struct wiphy *wiphy,
|
||||
|
||||
if (tb_vendor[QCA_WLAN_VENDOR_ATTR_WIFI_INFO_DRIVER_VERSION]) {
|
||||
hdd_debug("Rcvd req for Driver version");
|
||||
strlcpy(driver_version, QWLAN_VERSIONSTR,
|
||||
sizeof(driver_version));
|
||||
skb_len += strlen(driver_version) + 1;
|
||||
skb_len += strlen(QWLAN_VERSIONSTR) + 1;
|
||||
count++;
|
||||
}
|
||||
|
||||
@@ -7292,16 +7289,20 @@ __wlan_hdd_cfg80211_get_wifi_info(struct wiphy *wiphy,
|
||||
if (!pld_get_soc_info(hdd_ctx->parent_dev, &info))
|
||||
stt_flag = true;
|
||||
|
||||
snprintf(firmware_version, sizeof(firmware_version),
|
||||
"FW:%d.%d.%d.%d.%d.%d HW:%s STT:%s",
|
||||
hdd_ctx->fw_version_info.major_spid,
|
||||
hdd_ctx->fw_version_info.minor_spid,
|
||||
hdd_ctx->fw_version_info.siid,
|
||||
hdd_ctx->fw_version_info.rel_id,
|
||||
hdd_ctx->fw_version_info.crmid,
|
||||
hdd_ctx->fw_version_info.sub_id,
|
||||
hdd_ctx->target_hw_name,
|
||||
(stt_flag ? info.fw_build_id : " "));
|
||||
firmware_version = qdf_mem_malloc(SIR_VERSION_STRING_LEN);
|
||||
if (!firmware_version)
|
||||
return -ENOMEM;
|
||||
|
||||
snprintf(firmware_version, SIR_VERSION_STRING_LEN,
|
||||
"FW:%d.%d.%d.%d.%d.%d HW:%s STT:%s",
|
||||
hdd_ctx->fw_version_info.major_spid,
|
||||
hdd_ctx->fw_version_info.minor_spid,
|
||||
hdd_ctx->fw_version_info.siid,
|
||||
hdd_ctx->fw_version_info.rel_id,
|
||||
hdd_ctx->fw_version_info.crmid,
|
||||
hdd_ctx->fw_version_info.sub_id,
|
||||
hdd_ctx->target_hw_name,
|
||||
(stt_flag ? info.fw_build_id : " "));
|
||||
skb_len += strlen(firmware_version) + 1;
|
||||
count++;
|
||||
}
|
||||
@@ -7314,6 +7315,7 @@ __wlan_hdd_cfg80211_get_wifi_info(struct wiphy *wiphy,
|
||||
|
||||
if (count == 0) {
|
||||
hdd_err("unknown attribute in get_wifi_info request");
|
||||
qdf_mem_free(firmware_version);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -7322,13 +7324,14 @@ __wlan_hdd_cfg80211_get_wifi_info(struct wiphy *wiphy,
|
||||
|
||||
if (!reply_skb) {
|
||||
hdd_err("cfg80211_vendor_cmd_alloc_reply_skb failed");
|
||||
qdf_mem_free(firmware_version);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (tb_vendor[QCA_WLAN_VENDOR_ATTR_WIFI_INFO_DRIVER_VERSION]) {
|
||||
if (nla_put_string(reply_skb,
|
||||
QCA_WLAN_VENDOR_ATTR_WIFI_INFO_DRIVER_VERSION,
|
||||
driver_version))
|
||||
QWLAN_VERSIONSTR))
|
||||
goto error_nla_fail;
|
||||
}
|
||||
|
||||
@@ -7346,10 +7349,12 @@ __wlan_hdd_cfg80211_get_wifi_info(struct wiphy *wiphy,
|
||||
goto error_nla_fail;
|
||||
}
|
||||
|
||||
qdf_mem_free(firmware_version);
|
||||
return cfg80211_vendor_cmd_reply(reply_skb);
|
||||
|
||||
error_nla_fail:
|
||||
hdd_err("nla put fail");
|
||||
qdf_mem_free(firmware_version);
|
||||
kfree_skb(reply_skb);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
Viittaa uudesa ongelmassa
Block a user