VirtualBox

Changeset 66262 in vbox for trunk/src/recompiler/target-i386


Ignore:
Timestamp:
Mar 27, 2017 10:25:29 AM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
114183
Message:

REM: Do not mess with the TSS busy flag in CPU. Make sure that when loading TSS, the busy flag is set, not cleared. (bugref:8818)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/recompiler/target-i386/op_helper.c

    r58562 r66262  
    311311        cpu_abort(env, "invalid tss");
    312312    type = (env->tr.flags >> DESC_TYPE_SHIFT) & 0xf;
    313     if ((type & 7) != 1)
     313    if ((type & 7) != 3)
    314314        cpu_abort(env, "invalid tss type");
    315315    shift = type >> 3;
     
    596596    env->tr.flags = e2 & ~DESC_TSS_BUSY_MASK;
    597597#else
    598     env->tr.flags = e2 & (DESC_RAW_FLAG_BITS & ~(DESC_TSS_BUSY_MASK)); /** @todo stop clearing the busy bit, VT-x and AMD-V seems to set it in the hidden bits. */
     598    env->tr.flags = (e2 | DESC_TSS_BUSY_MASK) & DESC_RAW_FLAG_BITS;
    599599    env->tr.fVBoxFlags  = CPUMSELREG_FLAGS_VALID;
    600600    env->tr.newselector = 0;
     
    704704    /* TSS must be a valid 32 bit one */
    705705    if (!(env->tr.flags & DESC_P_MASK) ||
    706         ((env->tr.flags >> DESC_TYPE_SHIFT) & 0xf) != 9 ||
     706        ((env->tr.flags >> DESC_TYPE_SHIFT) & 0xf) != 11 ||
    707707        env->tr.limit < 103)
    708708        goto fail;
     
    11271127    /* TSS must be a valid 32 bit one */
    11281128    if (!(env->tr.flags & DESC_P_MASK) ||
    1129         ((env->tr.flags >> DESC_TYPE_SHIFT) & 0xf) != 9 ||
     1129        ((env->tr.flags >> DESC_TYPE_SHIFT) & 0xf) != 11 ||
    11301130        env->tr.limit < 103)
    11311131        goto fail;
     
    26392639            load_seg_cache_raw_dt(&env->tr, e1, e2);
    26402640        }
     2641        env->tr.flags |= DESC_TSS_BUSY_MASK;
    26412642        e2 |= DESC_TSS_BUSY_MASK;
    26422643        stl_kernel(ptr + 4, e2);
     
    61236124        cpu_abort(env, "invalid tss");
    61246125    type = (env->tr.flags >> DESC_TYPE_SHIFT) & 0xf;
    6125     if ((type & 7) != 1)
     6126    if ((type & 7) != 3)
    61266127        cpu_abort(env, "invalid tss type %d", type);
    61276128    shift = type >> 3;
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