[Qemu-devel] [PATCH for-3.0 3/4] tests: only update last_byte when at the edge

Peter Xu posted 4 patches 7 years, 3 months ago
[Qemu-devel] [PATCH for-3.0 3/4] tests: only update last_byte when at the edge
Posted by Peter Xu 7 years, 3 months ago
The only possible change of last_byte is when it reaches the edge.
Setting it every time might let last_byte contain an invalid data when
memory corruption is detected, then the check of the next byte will be
incorrect.  For example, a single page corruption at address 0x14ad000
will also lead to a "fake" corruption at 0x14ae000:

  Memory content inconsistency at 14ad000 first_byte = 44 last_byte = 44 current = ef hit_edge = 0
  Memory content inconsistency at 14ae000 first_byte = 44 last_byte = ef current = 44 hit_edge = 0

After the patch, it'll only report the corrputed page:

  Memory content inconsistency at 14ad000 first_byte = 44 last_byte = 44 current = ef hit_edge = 0

Signed-off-by: Peter Xu <peterx@redhat.com>
---
 tests/migration-test.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/migration-test.c b/tests/migration-test.c
index 086f727b34..e079e0bdb6 100644
--- a/tests/migration-test.c
+++ b/tests/migration-test.c
@@ -300,6 +300,7 @@ static void check_guests_ram(QTestState *who)
                  * to us yet.
                  */
                 hit_edge = true;
+                last_byte = b;
             } else {
                 fprintf(stderr, "Memory content inconsistency at %x"
                                 " first_byte = %x last_byte = %x current = %x"
@@ -308,7 +309,6 @@ static void check_guests_ram(QTestState *who)
                 bad = true;
             }
         }
-        last_byte = b;
     }
     g_assert_false(bad);
 }
-- 
2.17.1


Re: [Qemu-devel] [PATCH for-3.0 3/4] tests: only update last_byte when at the edge
Posted by Juan Quintela 7 years, 3 months ago
Peter Xu <peterx@redhat.com> wrote:
> The only possible change of last_byte is when it reaches the edge.
> Setting it every time might let last_byte contain an invalid data when
> memory corruption is detected, then the check of the next byte will be
> incorrect.  For example, a single page corruption at address 0x14ad000
> will also lead to a "fake" corruption at 0x14ae000:
>
>   Memory content inconsistency at 14ad000 first_byte = 44 last_byte = 44 current = ef hit_edge = 0
>   Memory content inconsistency at 14ae000 first_byte = 44 last_byte = ef current = 44 hit_edge = 0
>
> After the patch, it'll only report the corrputed page:
>
>   Memory content inconsistency at 14ad000 first_byte = 44 last_byte = 44 current = ef hit_edge = 0
>
> Signed-off-by: Peter Xu <peterx@redhat.com>

Reviewed-by: Juan Quintela <quintela@redhat.com>

Good catch.  I was having this problem in the past, but never
investigated the problem so far.