VirtualBox

Changeset 70697 in vbox


Ignore:
Timestamp:
Jan 23, 2018 4:47:29 AM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
120434
Message:

bootsectors/bs3-cpu-instr-2: Fix restoring FS/GS base after testing.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-template.c

    r70696 r70697  
    877877        if (fSupportsFsGsBase)
    878878        {
    879             uint64_t uBaseAddr;
     879            uint64_t const uBaseAddr = ASMRdMsr(idxFsGsBaseMsr);
    880880
    881881            /* CR4.FSGSBASE disabled -> #UD. */
     
    884884
    885885            /* Read and verify existing base address. */
    886             uBaseAddr  = ASMRdMsr(idxFsGsBaseMsr);
    887886            Ctx.rbx.u  = 0;
    888887            Ctx.cr4.u |= X86_CR4_FSGSBASE;
     
    905904            }
    906905
     906            /* Restore original base address. */
     907            ASMWrMsr(idxFsGsBaseMsr, uBaseAddr);
     908
    907909            /* Clean used GPRs. */
    908910            Ctx.rbx.u = 0;
     
    920922
    921923static void bs3CpuInstr2_wrfsbase_wrgsbase_Common(uint8_t bMode, BS3CI2FSGSBASE const *paFsGsBaseWorkers,
    922                                                   unsigned cFsGsBaseWorkers)
     924                                                  unsigned cFsGsBaseWorkers, uint32_t idxFsGsBaseMsr)
    923925{
    924926    BS3REGCTX         Ctx;
     
    949951        if (fSupportsFsGsBase)
    950952        {
     953            uint64_t const uBaseAddr = ASMRdMsr(idxFsGsBaseMsr);
     954
    951955            /* CR4.FSGSBASE disabled -> #UD. */
    952956            Ctx.cr4.u &= ~X86_CR4_FSGSBASE;
     
    973977            }
    974978
     979            /* Restore original base address. */
     980            ASMWrMsr(idxFsGsBaseMsr, uBaseAddr);
     981
    975982            /* Clean used GPRs. */
    976983            Ctx.rbx.u = 0;
     
    989996BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_wrfsbase)(uint8_t bMode)
    990997{
    991     bs3CpuInstr2_wrfsbase_wrgsbase_Common(bMode, s_aWrFsBaseWorkers, RT_ELEMENTS(s_aWrFsBaseWorkers));
     998    bs3CpuInstr2_wrfsbase_wrgsbase_Common(bMode, s_aWrFsBaseWorkers, RT_ELEMENTS(s_aWrFsBaseWorkers), MSR_K8_FS_BASE);
    992999    return 0;
    9931000}
     
    9961003BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_wrgsbase)(uint8_t bMode)
    9971004{
    998     bs3CpuInstr2_wrfsbase_wrgsbase_Common(bMode, s_aWrGsBaseWorkers, RT_ELEMENTS(s_aWrGsBaseWorkers));
     1005    bs3CpuInstr2_wrfsbase_wrgsbase_Common(bMode, s_aWrGsBaseWorkers, RT_ELEMENTS(s_aWrGsBaseWorkers), MSR_K8_FS_BASE);
    9991006    return 0;
    10001007}
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette