diff options
| author | Gerd Hoffmann <kraxel@redhat.com> | 2025-03-19 15:11:54 +0100 |
|---|---|---|
| committer | Gerd Hoffmann <kraxel@redhat.com> | 2025-03-21 12:00:38 +0100 |
| commit | ae24cf139ba681f8ce3dc809f3f1119b16c73043 (patch) | |
| tree | 7d682ab8e1eb34dae4b6272469c0305137a721d8 | |
| parent | 560429fd746adf04b57237c3c4a38ecfd906c592 (diff) | |
| download | focaccia-qemu-ae24cf139ba681f8ce3dc809f3f1119b16c73043.tar.gz focaccia-qemu-ae24cf139ba681f8ce3dc809f3f1119b16c73043.zip | |
hw/uefi: fix error handling in uefi_vars_json_save
Catch lseek errors. Return on errors. Use autoptr for the GString to simplify cleanup. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Message-ID: <20250319141159.1461621-3-kraxel@redhat.com>
| -rw-r--r-- | hw/uefi/var-service-json.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/hw/uefi/var-service-json.c b/hw/uefi/var-service-json.c index 761082c11f..f1c20a6b8c 100644 --- a/hw/uefi/var-service-json.c +++ b/hw/uefi/var-service-json.c @@ -178,7 +178,7 @@ void uefi_vars_json_init(uefi_vars_state *uv, Error **errp) void uefi_vars_json_save(uefi_vars_state *uv) { - GString *gstr; + g_autoptr(GString) gstr = NULL; int rc; if (uv->jsonfd == -1) { @@ -187,18 +187,25 @@ void uefi_vars_json_save(uefi_vars_state *uv) gstr = uefi_vars_to_json(uv); - lseek(uv->jsonfd, 0, SEEK_SET); + rc = lseek(uv->jsonfd, 0, SEEK_SET); + if (rc < 0) { + warn_report("%s: lseek error", __func__); + return; + } + rc = ftruncate(uv->jsonfd, 0); if (rc != 0) { warn_report("%s: ftruncate error", __func__); + return; } + rc = write(uv->jsonfd, gstr->str, gstr->len); if (rc != gstr->len) { warn_report("%s: write error", __func__); + return; } - fsync(uv->jsonfd); - g_string_free(gstr, true); + fsync(uv->jsonfd); } void uefi_vars_json_load(uefi_vars_state *uv, Error **errp) |