VirtualBox

Changeset 53108 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Oct 21, 2014 4:26:54 PM (10 years ago)
Author:
vboxsync
Message:

IEM: Call gate TSS access needs to check TSS bitness, not gate, duh.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp.h

    r53107 r53108  
    12091209            if (!IEM_IS_LONG_MODE(pIemCpu))
    12101210            {
    1211                 if (pDesc->Legacy.Gate.u4Type == X86_SEL_TYPE_SYS_386_CALL_GATE)
     1211                if (pCtx->tr.Attr.n.u4Type == X86_SEL_TYPE_SYS_386_TSS_BUSY)
    12121212                {
    12131213                    offNewStack = RT_OFFSETOF(X86TSS32, esp0) + uNewCSDpl * 8;
     
    12161216                else
    12171217                {
    1218                     Assert(pDesc->Legacy.Gate.u4Type == X86_SEL_TYPE_SYS_286_CALL_GATE);
     1218                    Assert(pCtx->tr.Attr.n.u4Type == X86_SEL_TYPE_SYS_286_TSS_BUSY);
    12191219                    offNewStack = RT_OFFSETOF(X86TSS16, sp0) + uNewCSDpl * 4;
    12201220                    cbNewStack  = RT_SIZEOFMEMB(X86TSS16, sp0) + RT_SIZEOFMEMB(X86TSS16, ss0);
     
    12231223            else
    12241224            {
    1225                 Assert(pDesc->Legacy.Gate.u4Type == AMD64_SEL_TYPE_SYS_CALL_GATE);
     1225                Assert(pCtx->tr.Attr.n.u4Type == AMD64_SEL_TYPE_SYS_TSS_BUSY);
    12261226                offNewStack = RT_OFFSETOF(X86TSS64, rsp0) + uNewCSDpl * RT_SIZEOFMEMB(X86TSS64, rsp0);
    12271227                cbNewStack  = RT_SIZEOFMEMB(X86TSS64, rsp0);
     
    12451245            if (!IEM_IS_LONG_MODE(pIemCpu))
    12461246            {
    1247                 if (pDesc->Legacy.Gate.u4Type == X86_SEL_TYPE_SYS_386_CALL_GATE)
     1247                if (pCtx->tr.Attr.n.u4Type == X86_SEL_TYPE_SYS_386_TSS_BUSY)
    12481248                {
    12491249                    uNewRsp = uPtrTSS.pu32[0];
     
    12521252                else
    12531253                {
    1254                     Assert(pDesc->Legacy.Gate.u4Type == X86_SEL_TYPE_SYS_286_CALL_GATE);
     1254                    Assert(pCtx->tr.Attr.n.u4Type == X86_SEL_TYPE_SYS_286_TSS_BUSY);
    12551255                    uNewRsp = uPtrTSS.pu16[0];
    12561256                    uNewSS  = uPtrTSS.pu16[1];
     
    12591259            else
    12601260            {
    1261                 Assert(pDesc->Legacy.Gate.u4Type == AMD64_SEL_TYPE_SYS_CALL_GATE);
     1261                Assert(pCtx->tr.Attr.n.u4Type == AMD64_SEL_TYPE_SYS_TSS_BUSY);
    12621262                /* SS will be a NULL selector, but that's valid. */
    12631263                uNewRsp = uPtrTSS.pu64[0];
Note: See TracChangeset for help on using the changeset viewer.

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