• Andy Lutomirski's avatar
    x86/ldt/64: Refresh DS and ES when modify_ldt changes an entry · a6323757
    Andy Lutomirski authored
    On x86_32, modify_ldt() implicitly refreshes the cached DS and ES
    segments because they are refreshed on return to usermode.
    
    On x86_64, they're not refreshed on return to usermode.  To improve
    determinism and match x86_32's behavior, refresh them when we update
    the LDT.
    
    This avoids a situation in which the DS points to a descriptor that is
    changed but the old cached segment persists until the next reschedule.
    If this happens, then the user-visible state will change
    nondeterministically some time after modify_ldt() returns, which is
    unfortunate.
    Signed-off-by: default avatarAndy Lutomirski <luto@kernel.org>
    Cc: Borislav Petkov <bpetkov@suse.de>
    Cc: Chang Seok <chang.seok.bae@intel.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    a6323757
ldt.c 6.99 KB