瀏覽代碼

qcacmn: Handle NULL regulatory_psoc_priv_obj

The reg_get_psoc_obj() may return NULL for invalid psoc object.

The wlan_regulatory_psoc_priv_obj becomes NULL in case of NULL psoc object.
This scenario is not considered in reg_get_reg_rules_for_pdev() and its
callers. Handle the NULL regulatory_psoc_priv_obj scenarios.

Change-Id: I5b039d362a76985995e0d4d4a95cd1a00b1f0991
CRs-Fixed: 3040335
Vignesh U 3 年之前
父節點
當前提交
422905b63c
共有 1 個文件被更改,包括 17 次插入0 次删除
  1. 17 0
      umac/regulatory/core/src/reg_services_common.c

+ 17 - 0
umac/regulatory/core/src/reg_services_common.c

@@ -4922,6 +4922,12 @@ reg_get_reg_rules_for_pdev(struct wlan_objmgr_pdev *pdev)
 
 	psoc = wlan_pdev_get_psoc(pdev);
 	psoc_reg_priv = reg_get_psoc_obj(psoc);
+
+	if (!psoc_reg_priv) {
+		reg_debug("Regulatory psoc private object is NULL");
+		return NULL;
+	}
+
 	phy_id = wlan_objmgr_pdev_get_pdev_id(pdev);
 	psoc_reg_rules = &psoc_reg_priv->mas_chan_params[phy_id].reg_rules;
 
@@ -5045,6 +5051,12 @@ static void reg_iterate_sp_rules(struct wlan_objmgr_pdev *pdev,
 	struct freq_range chip_range;
 
 	psoc_reg_rules = reg_get_reg_rules_for_pdev(pdev);
+
+	if (!psoc_reg_rules) {
+		reg_debug("psoc reg rule pointer is NULL");
+		return;
+	}
+
 	n_6g_sp_ap_reg_rules = psoc_reg_rules->num_of_6g_ap_reg_rules[REG_STANDARD_POWER_AP];
 	p_sp_reg_rule = psoc_reg_rules->reg_rules_6g_ap[REG_STANDARD_POWER_AP];
 
@@ -5906,6 +5918,11 @@ reg_get_num_rules_of_ap_pwr_type(struct wlan_objmgr_pdev *pdev,
 {
 	struct reg_rule_info *psoc_reg_rules = reg_get_reg_rules_for_pdev(pdev);
 
+	if (!psoc_reg_rules) {
+		reg_debug("No psoc_reg_rules");
+		return 0;
+	}
+
 	if (ap_pwr_type > REG_MAX_SUPP_AP_TYPE) {
 		reg_err("Unsupported 6G AP power type");
 		return 0;