Message ID | 20210714151319.617860-3-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
Series | qemu-config: never call the callback after an error, fix leak | expand |
diff --git a/util/qemu-config.c b/util/qemu-config.c index 7db810f1e0..fdf6cd69fc 100644 --- a/util/qemu-config.c +++ b/util/qemu-config.c @@ -414,7 +414,7 @@ static int qemu_config_foreach(FILE *fp, QEMUConfigCB *cb, void *opaque, if (ferror(fp)) { loc_pop(&loc); error_setg_errno(errp, errno, "Cannot read config file"); - return res; + goto out_no_loc; } res = count; if (qdict) { @@ -422,6 +422,7 @@ static int qemu_config_foreach(FILE *fp, QEMUConfigCB *cb, void *opaque, } out: loc_pop(&loc); +out_no_loc: qobject_unref(qdict); return res; }
The leak is basically impossible to reach, since the only common way to get ferror(fp) is by passing a directory to -readconfig. In that case, the error occurs before qdict is set to anything non-NULL. However, it's theoretically possible to get there after an EIO. Cc: armbru@redhat.com Reported-by: Peter Maydell <peter.maydell@linaro.org> Fixes: f7544edcd3 ("qemu-config: add error propagation to qemu_config_parse", 2021-03-06) Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- util/qemu-config.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)