iwlwifi: dbg_ini: check for valid region type during regions parsing
authorShahar S Matityahu <shahar.s.matityahu@intel.com>
Sun, 7 Apr 2019 07:46:08 +0000 (10:46 +0300)
committerLuca Coelho <luciano.coelho@intel.com>
Mon, 29 Apr 2019 15:42:48 +0000 (18:42 +0300)
Add region type checking during regions parsing to avoid attempts to
parse unsupported or illegal region types.

Signed-off-by: Shahar S Matityahu <shahar.s.matityahu@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/fw/dbg.c

index 62fd346ccb77a83a99113ed464a0f7bfb483169c..5f52e40a29032dd290991324a8f31f512c99fd16 100644 (file)
@@ -2469,15 +2469,20 @@ static void iwl_fw_dbg_update_regions(struct iwl_fw_runtime *fwrt,
 {
        void *iter = (void *)tlv->region_config;
        int i, size = le32_to_cpu(tlv->num_regions);
+       const char *err_st =
+               "WRT: ext=%d. Invalid region %s %d for apply point %d\n";
 
        for (i = 0; i < size; i++) {
                struct iwl_fw_ini_region_cfg *reg = iter, **active;
                int id = le32_to_cpu(reg->region_id);
                u32 type = le32_to_cpu(reg->region_type);
 
-               if (WARN(id >= ARRAY_SIZE(fwrt->dump.active_regs),
-                        "WRT: ext=%d. Invalid region id %d for apply point %d\n",
-                        ext, id, pnt))
+               if (WARN(id >= ARRAY_SIZE(fwrt->dump.active_regs), err_st, ext,
+                        "id", id, pnt))
+                       break;
+
+               if (WARN(type == 0 || type >= IWL_FW_INI_REGION_NUM, err_st,
+                        ext, "type", type, pnt))
                        break;
 
                active = &fwrt->dump.active_regs[id];