On Fri, 3 Nov 2023 at 07:02, <marcandre.lur...@redhat.com> wrote:
>
> From: Stephen Brennan <stephen.s.bren...@oracle.com>
>
> The QMP dump API represents the dump format as an enumeration. Add three
> new enumerators, one for each supported kdump compression, each named
> "kdump-raw-*".
>
> For the HMP command line, rather than adding a new flag corresponding to
> each format, it seems more human-friendly to add a single flag "-R" to
> switch the kdump formats to "raw" mode. The choice of "-R" also
> correlates nicely to the "makedumpfile -R" option, which would serve to
> reassemble a flattened vmcore.
>
> Signed-off-by: Stephen Brennan <stephen.s.bren...@oracle.com>
> Reviewed-by: Daniel P. Berrangé <berra...@redhat.com>
> [ Marc-André: replace loff_t with off_t, indent fixes ]
> Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com>
> Message-Id: <20230918233233.1431858-4-stephen.s.bren...@oracle.com>

Hi; Coverity points out some issues in this commit:

> diff --git a/dump/dump-hmp-cmds.c b/dump/dump-hmp-cmds.c
> index b038785fee..b428ec33df 100644
> --- a/dump/dump-hmp-cmds.c
> +++ b/dump/dump-hmp-cmds.c
> @@ -19,6 +19,7 @@ void hmp_dump_guest_memory(Monitor *mon, const QDict *qdict)
>      bool paging = qdict_get_try_bool(qdict, "paging", false);
>      bool zlib = qdict_get_try_bool(qdict, "zlib", false);
>      bool lzo = qdict_get_try_bool(qdict, "lzo", false);
> +    bool raw = qdict_get_try_bool(qdict, "raw", false);
>      bool snappy = qdict_get_try_bool(qdict, "snappy", false);
>      const char *file = qdict_get_str(qdict, "filename");
>      bool has_begin = qdict_haskey(qdict, "begin");
> @@ -40,16 +41,28 @@ void hmp_dump_guest_memory(Monitor *mon, const QDict 
> *qdict)
>          dump_format = DUMP_GUEST_MEMORY_FORMAT_WIN_DMP;
>      }
>
> -    if (zlib) {
> -        dump_format = DUMP_GUEST_MEMORY_FORMAT_KDUMP_ZLIB;
> +    if (zlib && raw) {
> +        if (raw) {
> +            dump_format = DUMP_GUEST_MEMORY_FORMAT_KDUMP_RAW_ZLIB;
> +        } else {
> +            dump_format = DUMP_GUEST_MEMORY_FORMAT_KDUMP_ZLIB;

This is dead code, beacuse the outer conditional "(zlib && raw)"
ensures that raw can't be false here. What was the intention here?
(CID 1523841)

> +        }
>      }
>
>      if (lzo) {
> -        dump_format = DUMP_GUEST_MEMORY_FORMAT_KDUMP_LZO;
> +        if (raw) {
> +            dump_format = DUMP_GUEST_MEMORY_FORMAT_KDUMP_RAW_LZO;
> +        } else {
> +            dump_format = DUMP_GUEST_MEMORY_FORMAT_KDUMP_LZO;
> +        }
>      }
>
>      if (snappy) {
> -        dump_format = DUMP_GUEST_MEMORY_FORMAT_KDUMP_SNAPPY;
> +        if (raw) {
> +            dump_format = DUMP_GUEST_MEMORY_FORMAT_KDUMP_RAW_SNAPPY;
> +        } else {
> +            dump_format = DUMP_GUEST_MEMORY_FORMAT_KDUMP_SNAPPY;
> +        }
>      }
>
>      if (has_begin) {


> @@ -2166,6 +2190,10 @@ void qmp_dump_guest_memory(bool paging, const char 
> *file,
>          error_setg(errp, QERR_INVALID_PARAMETER, "protocol");
>          return;
>      }
> +    if (kdump_raw && lseek(fd, 0, SEEK_CUR) == (off_t) -1) {
> +        error_setg(errp, "kdump-raw formats require a seekable file");
> +        return;
> +    }

This error-exit return path forgets to close(fd), so we leak
the file descriptor. (CID 1523842)

>
>      if (!dump_migration_blocker) {
>          error_setg(&dump_migration_blocker,

thanks
-- PMM

Reply via email to