qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] libqtest: handle zero length memwrite/memread


From: John Snow
Subject: Re: [Qemu-devel] [PATCH] libqtest: handle zero length memwrite/memread
Date: Wed, 11 Jan 2017 14:34:06 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0


On 01/11/2017 03:49 AM, Greg Kurz wrote:
> Some recently added tests pass a zero length to qtest_memwrite().
> Unfortunately, the qtest protocol doesn't implement an on-the-wire
> syntax for zero-length writes and the current code happily sends
> garbage to QEMU. This causes intermittent failures.
> 
> It isn't worth the pain to enhance the protocol, so this patch
> simply fixes the issue by "just return, doing nothing". The same
> fix is applied to qtest_memread() since the issue also exists in
> the QEMU part of the "memread" command.
> 
> Suggested-by: Peter Maydell <address@hidden>
> Signed-off-by: Greg Kurz <address@hidden>
> ---
>  qtest.c          |    2 ++
>  tests/libqtest.c |   12 +++++++++++-
>  2 files changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/qtest.c b/qtest.c
> index 46b99aed5291..bd9d4178129b 100644
> --- a/qtest.c
> +++ b/qtest.c
> @@ -430,6 +430,8 @@ static void qtest_process_command(CharBackend *chr, gchar 
> **words)
>          g_assert(words[1] && words[2]);
>          g_assert(qemu_strtoull(words[1], NULL, 0, &addr) == 0);
>          g_assert(qemu_strtoull(words[2], NULL, 0, &len) == 0);
> +        /* We'd send garbage to libqtest if len is 0 */
> +        g_assert(len);
>  
>          data = g_malloc(len);
>          cpu_physical_memory_read(addr, data, len);
> diff --git a/tests/libqtest.c b/tests/libqtest.c
> index 6f6975248fae..d8fba6647a17 100644
> --- a/tests/libqtest.c
> +++ b/tests/libqtest.c
> @@ -768,6 +768,10 @@ void qtest_memread(QTestState *s, uint64_t addr, void 
> *data, size_t size)
>      gchar **args;
>      size_t i;
>  
> +    if (!size) {
> +        return;
> +    }
> +
>      qtest_sendf(s, "read 0x%" PRIx64 " 0x%zx\n", addr, size);
>      args = qtest_rsp(s, 2);
>  
> @@ -858,7 +862,13 @@ void qtest_memwrite(QTestState *s, uint64_t addr, const 
> void *data, size_t size)
>  {
>      const uint8_t *ptr = data;
>      size_t i;
> -    char *enc = g_malloc(2 * size + 1);
> +    char *enc;
> +
> +    if (!size) {
> +        return;
> +    }
> +
> +    enc = g_malloc(2 * size + 1);
>  
>      for (i = 0; i < size; i++) {
>          sprintf(&enc[i * 2], "%02x", ptr[i]);
> 
> 

Reviewed-by: John Snow <address@hidden>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]