lkml.org 
[lkml]   [2022]   [Oct]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 368/530] x86/hyperv: Fix struct hv_enlightened_vmcs definition
    Date
    From: Vitaly Kuznetsov <vkuznets@redhat.com>

    [ Upstream commit ea9da788a61e47e7ab9cbad397453e51cd82ac0d ]

    Section 1.9 of TLFS v6.0b says:

    "All structures are padded in such a way that fields are aligned
    naturally (that is, an 8-byte field is aligned to an offset of 8 bytes
    and so on)".

    'struct enlightened_vmcs' has a glitch:

    ...
    struct {
    u32 nested_flush_hypercall:1; /* 836: 0 4 */
    u32 msr_bitmap:1; /* 836: 1 4 */
    u32 reserved:30; /* 836: 2 4 */
    } hv_enlightenments_control; /* 836 4 */
    u32 hv_vp_id; /* 840 4 */
    u64 hv_vm_id; /* 844 8 */
    u64 partition_assist_page; /* 852 8 */
    ...

    And the observed values in 'partition_assist_page' make no sense at
    all. Fix the layout by padding the structure properly.

    Fixes: 68d1eb72ee99 ("x86/hyper-v: define struct hv_enlightened_vmcs and clean field bits")
    Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
    Reviewed-by: Michael Kelley <mikelley@microsoft.com>
    Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Link: https://lore.kernel.org/r/20220830133737.1539624-2-vkuznets@redhat.com
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/x86/include/asm/hyperv-tlfs.h | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h
    index 2322d6bd5883..b54b3e18d94b 100644
    --- a/arch/x86/include/asm/hyperv-tlfs.h
    +++ b/arch/x86/include/asm/hyperv-tlfs.h
    @@ -529,7 +529,7 @@ struct hv_enlightened_vmcs {
    u64 guest_rip;

    u32 hv_clean_fields;
    - u32 hv_padding_32;
    + u32 padding32_1;
    u32 hv_synthetic_controls;
    struct {
    u32 nested_flush_hypercall:1;
    @@ -537,7 +537,7 @@ struct hv_enlightened_vmcs {
    u32 reserved:30;
    } __packed hv_enlightenments_control;
    u32 hv_vp_id;
    -
    + u32 padding32_2;
    u64 hv_vm_id;
    u64 partition_assist_page;
    u64 padding64_4[4];
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-10-24 17:58    [W:2.996 / U:0.652 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site