int remain = region_len;
        u32 estatus_len;
 
-       if (!estatus->block_status)
-               return;
-
-       while (remain > sizeof(struct acpi_bert_region)) {
-               if (cper_estatus_check(estatus)) {
-                       pr_err(FW_BUG "Invalid error record.\n");
-                       return;
-               }
-
+       while (remain >= sizeof(struct acpi_bert_region)) {
                estatus_len = cper_estatus_len(estatus);
                if (remain < estatus_len) {
                        pr_err(FW_BUG "Truncated status block (length: %u).\n",
                        return;
                }
 
+               /* No more error records. */
+               if (!estatus->block_status)
+                       return;
+
+               if (cper_estatus_check(estatus)) {
+                       pr_err(FW_BUG "Invalid error record.\n");
+                       return;
+               }
+
                pr_info_once("Error records from previous boot:\n");
 
                cper_estatus_print(KERN_INFO HW_ERR, estatus);
                estatus->block_status = 0;
 
                estatus = (void *)estatus + estatus_len;
-               /* No more error records. */
-               if (!estatus->block_status)
-                       return;
-
                remain -= estatus_len;
        }
 }