summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhang Qian <zhangq@codeaurora.org>2017-04-06 11:38:45 +0800
committerSandeep Puligilla <spuligil@codeaurora.org>2017-04-11 08:07:31 -0700
commit152315e166cf59b926529eeb3d11f96635b49492 (patch)
tree12e064277f8fbbc4732a3495546d22f35f3507a3
parent4845fcd030e42f13d4c22024f11dfdf36cc6f7d4 (diff)
qcacld-3.0: Resolve NULL pointer dereference
Some NULL pointers are dereferenced in wlan_hdd_stats.c. 1. In function hdd_populate_wifi_peer_ps_info, pointer 'peers' returned from call to function 'nla_nest_start' may be NULL. 2. In function wlan_hdd_cfg80211_link_layer_stats_ext_callback, pointer 'skb' returned from call to function 'cfg80211_vendor_event_alloc' may be NULL and will be dereferenced. Change-Id: I5dc9ec0797d6854367495b8312bff7fcb4c8518a CRs-Fixed: 2029801
-rw-r--r--core/hdd/src/wlan_hdd_stats.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/core/hdd/src/wlan_hdd_stats.c b/core/hdd/src/wlan_hdd_stats.c
index dcd3698a3710..00b0c176ac58 100644
--- a/core/hdd/src/wlan_hdd_stats.c
+++ b/core/hdd/src/wlan_hdd_stats.c
@@ -1754,8 +1754,12 @@ static int hdd_populate_wifi_peer_ps_info(tSirWifiPeerStat *data,
wifi_peer_info = &data->peerInfo[i];
peers = nla_nest_start(vendor_event, i);
- if (hdd_populate_per_peer_ps_info(wifi_peer_info,
- vendor_event))
+ if (peers == NULL) {
+ hdd_err("nla_nest_start failed");
+ return -EINVAL;
+ }
+
+ if (hdd_populate_per_peer_ps_info(wifi_peer_info, vendor_event))
return -EINVAL;
nla_nest_end(vendor_event, peers);
@@ -1852,7 +1856,7 @@ void wlan_hdd_cfg80211_link_layer_stats_ext_callback(tHddHandle ctx,
index, GFP_KERNEL);
if (!skb) {
hdd_err("cfg80211_vendor_event_alloc failed.");
- goto exit;
+ return;
}
results = linkLayer_stats_results->results;
@@ -1871,11 +1875,12 @@ void wlan_hdd_cfg80211_link_layer_stats_ext_callback(tHddHandle ctx,
status = hdd_populate_tx_failure_info(tx_fail, skb);
} else if (param_id & WMI_LL_STATS_EXT_MAC_COUNTER) {
hdd_info("MAC counters stats");
+ status = -EINVAL;
} else {
hdd_info("Unknown link layer stats");
+ status = -EINVAL;
}
-exit:
if (status == 0)
cfg80211_vendor_event(skb, GFP_KERNEL);
else