0157-x86-entry-64-Remove-the-SYSENTER-stack-canary.patch 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. From b153f8e687bf0739b113445d3cfe029593e9484a Mon Sep 17 00:00:00 2001
  2. From: Andy Lutomirski <[email protected]>
  3. Date: Mon, 4 Dec 2017 15:07:27 +0100
  4. Subject: [PATCH 157/241] x86/entry/64: Remove the SYSENTER stack canary
  5. MIME-Version: 1.0
  6. Content-Type: text/plain; charset=UTF-8
  7. Content-Transfer-Encoding: 8bit
  8. CVE-2017-5754
  9. Now that the SYSENTER stack has a guard page, there's no need for a canary
  10. to detect overflow after the fact.
  11. Signed-off-by: Andy Lutomirski <[email protected]>
  12. Signed-off-by: Thomas Gleixner <[email protected]>
  13. Reviewed-by: Thomas Gleixner <[email protected]>
  14. Reviewed-by: Borislav Petkov <[email protected]>
  15. Cc: Boris Ostrovsky <[email protected]>
  16. Cc: Borislav Petkov <[email protected]>
  17. Cc: Borislav Petkov <[email protected]>
  18. Cc: Brian Gerst <[email protected]>
  19. Cc: Dave Hansen <[email protected]>
  20. Cc: Dave Hansen <[email protected]>
  21. Cc: David Laight <[email protected]>
  22. Cc: Denys Vlasenko <[email protected]>
  23. Cc: Eduardo Valentin <[email protected]>
  24. Cc: Greg KH <[email protected]>
  25. Cc: H. Peter Anvin <[email protected]>
  26. Cc: Josh Poimboeuf <[email protected]>
  27. Cc: Juergen Gross <[email protected]>
  28. Cc: Linus Torvalds <[email protected]>
  29. Cc: Peter Zijlstra <[email protected]>
  30. Cc: Rik van Riel <[email protected]>
  31. Cc: Will Deacon <[email protected]>
  32. Cc: [email protected]
  33. Cc: [email protected]
  34. Cc: [email protected]
  35. Cc: [email protected]
  36. Link: https://lkml.kernel.org/r/[email protected]
  37. Signed-off-by: Ingo Molnar <[email protected]>
  38. (cherry picked from commit 7fbbd5cbebf118a9e09f5453f686656a167c3d1c)
  39. Signed-off-by: Andy Whitcroft <[email protected]>
  40. Signed-off-by: Kleber Sacilotto de Souza <[email protected]>
  41. (cherry picked from commit 8158adf795cb48be67891feacacc36d7a247afdf)
  42. Signed-off-by: Fabian Grünbichler <[email protected]>
  43. ---
  44. arch/x86/include/asm/processor.h | 1 -
  45. arch/x86/kernel/dumpstack.c | 3 +--
  46. arch/x86/kernel/process.c | 1 -
  47. arch/x86/kernel/traps.c | 7 -------
  48. 4 files changed, 1 insertion(+), 11 deletions(-)
  49. diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
  50. index 1bfe4bad797a..4737d378d7b5 100644
  51. --- a/arch/x86/include/asm/processor.h
  52. +++ b/arch/x86/include/asm/processor.h
  53. @@ -335,7 +335,6 @@ struct tss_struct {
  54. * Space for the temporary SYSENTER stack, used for SYSENTER
  55. * and the entry trampoline as well.
  56. */
  57. - unsigned long SYSENTER_stack_canary;
  58. unsigned long SYSENTER_stack[64];
  59. /*
  60. diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c
  61. index c1f503673f1e..c32c6cce9dcc 100644
  62. --- a/arch/x86/kernel/dumpstack.c
  63. +++ b/arch/x86/kernel/dumpstack.c
  64. @@ -48,8 +48,7 @@ bool in_sysenter_stack(unsigned long *stack, struct stack_info *info)
  65. int cpu = smp_processor_id();
  66. struct tss_struct *tss = &get_cpu_entry_area(cpu)->tss;
  67. - /* Treat the canary as part of the stack for unwinding purposes. */
  68. - void *begin = &tss->SYSENTER_stack_canary;
  69. + void *begin = &tss->SYSENTER_stack;
  70. void *end = (void *)&tss->SYSENTER_stack + sizeof(tss->SYSENTER_stack);
  71. if ((void *)stack < begin || (void *)stack >= end)
  72. diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
  73. index 407fc37a8718..ec758390d24e 100644
  74. --- a/arch/x86/kernel/process.c
  75. +++ b/arch/x86/kernel/process.c
  76. @@ -80,7 +80,6 @@ __visible DEFINE_PER_CPU_SHARED_ALIGNED(struct tss_struct, cpu_tss) = {
  77. */
  78. .io_bitmap = { [0 ... IO_BITMAP_LONGS] = ~0 },
  79. #endif
  80. - .SYSENTER_stack_canary = STACK_END_MAGIC,
  81. };
  82. EXPORT_PER_CPU_SYMBOL(cpu_tss);
  83. diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
  84. index fd4d47e8672e..2818c83892b3 100644
  85. --- a/arch/x86/kernel/traps.c
  86. +++ b/arch/x86/kernel/traps.c
  87. @@ -826,13 +826,6 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code)
  88. debug_stack_usage_dec();
  89. exit:
  90. - /*
  91. - * This is the most likely code path that involves non-trivial use
  92. - * of the SYSENTER stack. Check that we haven't overrun it.
  93. - */
  94. - WARN(this_cpu_read(cpu_tss.SYSENTER_stack_canary) != STACK_END_MAGIC,
  95. - "Overran or corrupted SYSENTER stack\n");
  96. -
  97. ist_exit(regs);
  98. }
  99. NOKPROBE_SYMBOL(do_debug);
  100. --
  101. 2.14.2