diff options
| author | Zhang Qian <zhangq@codeaurora.org> | 2017-04-06 11:38:45 +0800 |
|---|---|---|
| committer | Sandeep Puligilla <spuligil@codeaurora.org> | 2017-04-11 08:07:31 -0700 |
| commit | 152315e166cf59b926529eeb3d11f96635b49492 (patch) | |
| tree | 12e064277f8fbbc4732a3495546d22f35f3507a3 | |
| parent | 4845fcd030e42f13d4c22024f11dfdf36cc6f7d4 (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.c | 13 |
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 |
