• D
    x86/fpu: Check to ensure increasing-offset xstate offsets · e6e888f9
    Dave Hansen 提交于
    The xstate CPUID leaves enumerate where each state component is
    inside the XSAVE buffer, along with the size of the entire
    buffer.  Our new XSAVE sanity-checking code extrapolates an
    expected _total_ buffer size by looking at the last component
    that it encounters.
    
    That method requires that the highest-numbered component also
    be the one with the highest offset.  This is a pretty safe
    assumption, but let's add some code to ensure it stays true.
    
    To make this check work correctly, we also need to ensure we
    only consider the offsets from enabled features because the
    offset register (ebx) will return 0 on unsupported features.
    
    This also means that we will preserve the -1's that we
    initialized xstate_offsets/sizes[] with.  That will help
    find bugs.
    Signed-off-by: NDave Hansen <dave.hansen@linux.intel.com>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: Fenghua Yu <fenghua.yu@intel.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tim Chen <tim.c.chen@linux.intel.com>
    Cc: dave@sr71.net
    Cc: linux-kernel@vger.kernel.org
    Link: http://lkml.kernel.org/r/20150902233130.0843AB15@viggo.jf.intel.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
    e6e888f9
xstate.c 18.7 KB