/* We have 8 bits to indicate validity */
                map_addr = offset * 8;
-               if (map_addr >= EFUSE_MAP_LEN) {
-                       dev_warn(dev, "%s: Illegal map_addr (%04x), "
-                                "efuse corrupt!\n",
-                                __func__, map_addr);
-                       ret = -EINVAL;
-                       goto exit;
-               }
                for (i = 0; i < EFUSE_MAX_WORD_UNIT; i++) {
                        /* Check word enable condition in the section */
                        if (word_mask & BIT(i)) {
                        ret = rtl8xxxu_read_efuse8(priv, efuse_addr++, &val8);
                        if (ret)
                                goto exit;
+                       if (map_addr >= EFUSE_MAP_LEN - 1) {
+                               dev_warn(dev, "%s: Illegal map_addr (%04x), "
+                                        "efuse corrupt!\n",
+                                        __func__, map_addr);
+                               ret = -EINVAL;
+                               goto exit;
+                       }
                        priv->efuse_wifi.raw[map_addr++] = val8;
 
                        ret = rtl8xxxu_read_efuse8(priv, efuse_addr++, &val8);