0219-x86-smpboot-Remove-stale-TLB-flush-invocations.patch 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. From 079b59f4b5c810ea51534a8d7bcee4860589b5c1 Mon Sep 17 00:00:00 2001
  2. From: Thomas Gleixner <[email protected]>
  3. Date: Sat, 30 Dec 2017 22:13:53 +0100
  4. Subject: [PATCH 219/242] x86/smpboot: Remove stale TLB flush invocations
  5. MIME-Version: 1.0
  6. Content-Type: text/plain; charset=UTF-8
  7. Content-Transfer-Encoding: 8bit
  8. CVE-2017-5754
  9. smpboot_setup_warm_reset_vector() and smpboot_restore_warm_reset_vector()
  10. invoke local_flush_tlb() for no obvious reason.
  11. Digging in history revealed that the original code in the 2.1 era added
  12. those because the code manipulated a swapper_pg_dir pagetable entry. The
  13. pagetable manipulation was removed long ago in the 2.3 timeframe, but the
  14. TLB flush invocations stayed around forever.
  15. Remove them along with the pointless pr_debug()s which come from the same 2.1
  16. change.
  17. Reported-by: Dominik Brodowski <[email protected]>
  18. Signed-off-by: Thomas Gleixner <[email protected]>
  19. Cc: <[email protected]>
  20. Cc: Andy Lutomirski <[email protected]>
  21. Cc: Borislav Petkov <[email protected]>
  22. Cc: Dave Hansen <[email protected]>
  23. Cc: Linus Torvalds <[email protected]>
  24. Cc: Linus Torvalds <[email protected]>
  25. Cc: Peter Zijlstra <[email protected]>
  26. Link: http://lkml.kernel.org/r/[email protected]
  27. Signed-off-by: Ingo Molnar <[email protected]>
  28. (cherry picked from commit 322f8b8b340c824aef891342b0f5795d15e11562)
  29. Signed-off-by: Andy Whitcroft <[email protected]>
  30. Signed-off-by: Kleber Sacilotto de Souza <[email protected]>
  31. (cherry picked from commit fb08c4a80a22dc79c9775f493e291dfe2c642b86)
  32. Signed-off-by: Fabian Grünbichler <[email protected]>
  33. ---
  34. arch/x86/kernel/smpboot.c | 9 ---------
  35. 1 file changed, 9 deletions(-)
  36. diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
  37. index 03d2ba2da3b0..6ad8391b9866 100644
  38. --- a/arch/x86/kernel/smpboot.c
  39. +++ b/arch/x86/kernel/smpboot.c
  40. @@ -128,25 +128,16 @@ static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip)
  41. spin_lock_irqsave(&rtc_lock, flags);
  42. CMOS_WRITE(0xa, 0xf);
  43. spin_unlock_irqrestore(&rtc_lock, flags);
  44. - local_flush_tlb();
  45. - pr_debug("1.\n");
  46. *((volatile unsigned short *)phys_to_virt(TRAMPOLINE_PHYS_HIGH)) =
  47. start_eip >> 4;
  48. - pr_debug("2.\n");
  49. *((volatile unsigned short *)phys_to_virt(TRAMPOLINE_PHYS_LOW)) =
  50. start_eip & 0xf;
  51. - pr_debug("3.\n");
  52. }
  53. static inline void smpboot_restore_warm_reset_vector(void)
  54. {
  55. unsigned long flags;
  56. - /*
  57. - * Install writable page 0 entry to set BIOS data area.
  58. - */
  59. - local_flush_tlb();
  60. -
  61. /*
  62. * Paranoid: Set warm reset code and vector here back
  63. * to default values.
  64. --
  65. 2.14.2