• Andy Lutomirski's avatar
    x86/nmi/64: Reorder nested NMI checks · 7eddd205
    Andy Lutomirski authored
    commit a27507ca upstream.
    
    Check the repeat_nmi .. end_repeat_nmi special case first.  The next
    patch will rework the RSP check and, as a side effect, the RSP check
    will no longer detect repeat_nmi .. end_repeat_nmi, so we'll need
    this ordering of the checks.
    
    Note: this is more subtle than it appears.  The check for repeat_nmi
    .. end_repeat_nmi jumps straight out of the NMI code instead of
    adjusting the "iret" frame to force a repeat.  This is necessary,
    because the code between repeat_nmi and end_repeat_nmi sets "NMI
    executing" and then writes to the "iret" frame itself.  If a nested
    NMI comes in and modifies the "iret" frame while repeat_nmi is also
    modifying it, we'll end up with garbage.  The old code got this
    right, as does the new code, but the new code is a bit more
    explicit.
    
    If we were to move the check right after the "NMI executing" check,
    then we'd get it wrong and have random crashes.
    
    This is a prerequisite for the fix for CVE-2015-3291.
    Signed-off-by: default avatarAndy Lutomirski <luto@kernel.org>
    [bwh: Backported to 4.0: adjust filename, spacing]
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    Acked-by: default avatarJohn Johansen <john.johansen@canonical.com>
    Acked-by: default avatarAndy Whitcroft <apw@canonical.com>
    Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
    Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
    7eddd205
entry_64.S 46 KB