[PATCH] hw/vmcoreinfo: make guest format endian safe

Ani Sinha posted 1 patch 4 months, 2 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20240712062452.31457-1-anisinha@redhat.com
Maintainers: "Marc-André Lureau" <marcandre.lureau@redhat.com>
hw/misc/vmcoreinfo.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
[PATCH] hw/vmcoreinfo: make guest format endian safe
Posted by Ani Sinha 4 months, 2 weeks ago
Guest and host formats in struct FWCfgVMCoreInfo are written in little endian
format. However, the hypervisor host might be big endian. We need to do
appropriate conversions between the formats before comparing the values. Fix it.

Signed-off-by: Ani Sinha <anisinha@redhat.com>
---
 hw/misc/vmcoreinfo.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/hw/misc/vmcoreinfo.c b/hw/misc/vmcoreinfo.c
index 833773ade5..e00df95e29 100644
--- a/hw/misc/vmcoreinfo.c
+++ b/hw/misc/vmcoreinfo.c
@@ -21,9 +21,10 @@
 static void fw_cfg_vmci_write(void *dev, off_t offset, size_t len)
 {
     VMCoreInfoState *s = VMCOREINFO(dev);
+    uint16_t guest_format = le16_to_cpu(s->vmcoreinfo.guest_format);
 
     s->has_vmcoreinfo = offset == 0 && len == sizeof(s->vmcoreinfo)
-        && s->vmcoreinfo.guest_format != FW_CFG_VMCOREINFO_FORMAT_NONE;
+        && guest_format != FW_CFG_VMCOREINFO_FORMAT_NONE;
 }
 
 static void vmcoreinfo_reset(void *dev)
-- 
2.42.0
Re: [PATCH] hw/vmcoreinfo: make guest format endian safe
Posted by Marc-André Lureau 4 months, 2 weeks ago
Hi

On Fri, Jul 12, 2024 at 10:25 AM Ani Sinha <anisinha@redhat.com> wrote:
>
> Guest and host formats in struct FWCfgVMCoreInfo are written in little endian
> format. However, the hypervisor host might be big endian. We need to do
> appropriate conversions between the formats before comparing the values. Fix it.
>

Looks right, but that shouldn't matter since the comparison is with 0.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

> Signed-off-by: Ani Sinha <anisinha@redhat.com>
> ---
>  hw/misc/vmcoreinfo.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/hw/misc/vmcoreinfo.c b/hw/misc/vmcoreinfo.c
> index 833773ade5..e00df95e29 100644
> --- a/hw/misc/vmcoreinfo.c
> +++ b/hw/misc/vmcoreinfo.c
> @@ -21,9 +21,10 @@
>  static void fw_cfg_vmci_write(void *dev, off_t offset, size_t len)
>  {
>      VMCoreInfoState *s = VMCOREINFO(dev);
> +    uint16_t guest_format = le16_to_cpu(s->vmcoreinfo.guest_format);
>
>      s->has_vmcoreinfo = offset == 0 && len == sizeof(s->vmcoreinfo)
> -        && s->vmcoreinfo.guest_format != FW_CFG_VMCOREINFO_FORMAT_NONE;
> +        && guest_format != FW_CFG_VMCOREINFO_FORMAT_NONE;
>  }
>
>  static void vmcoreinfo_reset(void *dev)
> --
> 2.42.0
>