1. 12 1月, 2017 1 次提交
    • J
      x86/unwind: Include __schedule() in stack traces · 2c96b2fe
      Josh Poimboeuf 提交于
      In the following commit:
      
        0100301b ("sched/x86: Rewrite the switch_to() code")
      
      ... the layout of the 'inactive_task_frame' struct was designed to have
      a frame pointer header embedded in it, so that the unwinder could use
      the 'bp' and 'ret_addr' fields to report __schedule() on the stack (or
      ret_from_fork() for newly forked tasks which haven't actually run yet).
      
      Finish the job by changing get_frame_pointer() to return a pointer to
      inactive_task_frame's 'bp' field rather than 'bp' itself.  This allows
      the unwinder to start one frame higher on the stack, so that it properly
      reports __schedule().
      Reported-by: NMiroslav Benes <mbenes@suse.cz>
      Signed-off-by: NJosh Poimboeuf <jpoimboe@redhat.com>
      Cc: Andy Lutomirski <luto@amacapital.net>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: Dave Jones <davej@codemonkey.org.uk>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: Dmitry Vyukov <dvyukov@google.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>
      Link: http://lkml.kernel.org/r/598e9f7505ed0aba86e8b9590aa528c6c7ae8dcd.1483978430.git.jpoimboe@redhat.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
      2c96b2fe
  2. 24 8月, 2016 4 次提交
  3. 05 5月, 2016 1 次提交
  4. 25 9月, 2015 1 次提交
    • A
      x86/sched/64: Don't save flags on context switch (reinstated) · 3f2c5085
      Andy Lutomirski 提交于
      This reinstates the following commit:
      
        2c7577a7 ("sched/x86_64: Don't save flags on context switch")
      
      which was reverted in:
      
        512255a2 ("Revert 'sched/x86_64: Don't save flags on context switch'")
      
      Historically, Linux has always saved and restored EFLAGS across
      context switches.  As far as I know, the only reason to do this
      is because of the NT flag.  In particular, if something calls
      switch_to() with the NT flag set, then we don't want to leak the
      NT flag into a different task that might try to IRET and fail
      because NT is set.
      
      Before this commit:
      
        8c7aa698 ("x86_64, entry: Filter RFLAGS.NT on entry from userspace")
      
      we could run system call bodies with NT set.  This would be a DoS or possibly
      privilege escalation hole if scheduling in such a system call would leak
      NT into a different task.
      
      Importantly, we don't need to worry about NT being set while
      preemptible or across page faults.  The only way we can schedule
      due to preemption or a page fault is in an interrupt entry that
      nests inside the SYSENTER prologue.  The CPU will clear NT when
      entering through an interrupt gate, so we won't schedule with NT
      set.
      
      The only other interesting flags are IOPL and AC.  Allowing
      switch_to() to change IOPL has no effect, as the value loaded
      during kernel execution doesn't matter at all except between a
      SYSENTER entry and the subsequent PUSHF, and anythign that
      interrupts in that window will restore IOPL on return.
      
      If we call __switch_to() with AC set, we have bigger problems.
      Signed-off-by: NAndy Lutomirski <luto@kernel.org>
      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: 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>
      Link: http://lkml.kernel.org/r/d4440fdc2a89247bffb7c003d2a9a2952bd46827.1441146105.git.luto@kernel.orgSigned-off-by: NIngo Molnar <mingo@kernel.org>
      3f2c5085
  5. 18 8月, 2015 1 次提交
  6. 28 10月, 2014 1 次提交
  7. 07 8月, 2013 1 次提交
  8. 29 3月, 2012 1 次提交