diff mbox

target-ppc: KVMPPC_H_CAS fix cpu-version endianess

Message ID 20140627134737.26170.27909.stgit@nimbus
State New
Headers show

Commit Message

Laurent Dufour June 27, 2014, 1:47 p.m. UTC
During KVMPPC_H_CAS processing, the cpu-version updated value is stored
without taking care of the current endianess. As a consequence, the guest
may not switch to the right CPU model, leading to unexpected results.

If needed, the value is now converted.

Fixes: 6d9412ea8132 ("target-ppc: Implement "compat" CPU option")
Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
---
 hw/ppc/spapr.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Comments

Greg Kurz June 27, 2014, 3:16 p.m. UTC | #1
On Fri, 27 Jun 2014 15:47:37 +0200
Laurent Dufour <ldufour@linux.vnet.ibm.com> wrote:

> During KVMPPC_H_CAS processing, the cpu-version updated value is stored
> without taking care of the current endianess. As a consequence, the guest
> may not switch to the right CPU model, leading to unexpected results.
> 
> If needed, the value is now converted.
> 
> Fixes: 6d9412ea8132 ("target-ppc: Implement "compat" CPU option")
> Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
> ---

Reviewed-by: Greg Kurz <gkurz@linux.vnet.ibm.com>

>  hw/ppc/spapr.c |    3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 82f183f173ee..85e9f4a74933 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -228,8 +228,7 @@ static int spapr_fixup_cpu_smt_dt(void *fdt, int offset, PowerPCCPU *cpu,
>      int index = ppc_get_vcpu_dt_id(cpu);
> 
>      if (cpu->cpu_version) {
> -        ret = fdt_setprop(fdt, offset, "cpu-version",
> -                          &cpu->cpu_version, sizeof(cpu->cpu_version));
> +        ret = fdt_setprop_cell(fdt, offset, "cpu-version", cpu->cpu_version);
>          if (ret < 0) {
>              return ret;
>          }
> 
>
Alexander Graf June 27, 2014, 4:13 p.m. UTC | #2
On 27.06.14 17:16, Greg Kurz wrote:
> On Fri, 27 Jun 2014 15:47:37 +0200
> Laurent Dufour <ldufour@linux.vnet.ibm.com> wrote:
>
>> During KVMPPC_H_CAS processing, the cpu-version updated value is stored
>> without taking care of the current endianess. As a consequence, the guest
>> may not switch to the right CPU model, leading to unexpected results.
>>
>> If needed, the value is now converted.
>>
>> Fixes: 6d9412ea8132 ("target-ppc: Implement "compat" CPU option")
>> Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
>> ---
> Reviewed-by: Greg Kurz <gkurz@linux.vnet.ibm.com>

Good catch! Thanks, applied to ppc-next.


Alex
diff mbox

Patch

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 82f183f173ee..85e9f4a74933 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -228,8 +228,7 @@  static int spapr_fixup_cpu_smt_dt(void *fdt, int offset, PowerPCCPU *cpu,
     int index = ppc_get_vcpu_dt_id(cpu);
 
     if (cpu->cpu_version) {
-        ret = fdt_setprop(fdt, offset, "cpu-version",
-                          &cpu->cpu_version, sizeof(cpu->cpu_version));
+        ret = fdt_setprop_cell(fdt, offset, "cpu-version", cpu->cpu_version);
         if (ret < 0) {
             return ret;
         }