0084-x86-boot-Relocate-definition-of-the-initial-state-of.patch 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. From e0cef0182f7d13edb48119653a4fc225b0287b5a Mon Sep 17 00:00:00 2001
  2. From: Ricardo Neri <[email protected]>
  3. Date: Fri, 27 Oct 2017 13:25:29 -0700
  4. Subject: [PATCH 084/242] x86/boot: Relocate definition of the initial state of
  5. CR0
  6. MIME-Version: 1.0
  7. Content-Type: text/plain; charset=UTF-8
  8. Content-Transfer-Encoding: 8bit
  9. CVE-2017-5754
  10. Both head_32.S and head_64.S utilize the same value to initialize the
  11. control register CR0. Also, other parts of the kernel might want to access
  12. this initial definition (e.g., emulation code for User-Mode Instruction
  13. Prevention uses this state to provide a sane dummy value for CR0 when
  14. emulating the smsw instruction). Thus, relocate this definition to a
  15. header file from which it can be conveniently accessed.
  16. Suggested-by: Borislav Petkov <[email protected]>
  17. Signed-off-by: Ricardo Neri <[email protected]>
  18. Signed-off-by: Thomas Gleixner <[email protected]>
  19. Reviewed-by: Borislav Petkov <[email protected]>
  20. Reviewed-by: Andy Lutomirski <[email protected]>
  21. Cc: "Michael S. Tsirkin" <[email protected]>
  22. Cc: Peter Zijlstra <[email protected]>
  23. Cc: Dave Hansen <[email protected]>
  24. Cc: [email protected]
  25. Cc: [email protected]
  26. Cc: Paul Gortmaker <[email protected]>
  27. Cc: Huang Rui <[email protected]>
  28. Cc: Shuah Khan <[email protected]>
  29. Cc: [email protected]
  30. Cc: Jonathan Corbet <[email protected]>
  31. Cc: Jiri Slaby <[email protected]>
  32. Cc: "Ravi V. Shankar" <[email protected]>
  33. Cc: Denys Vlasenko <[email protected]>
  34. Cc: Chris Metcalf <[email protected]>
  35. Cc: Brian Gerst <[email protected]>
  36. Cc: Josh Poimboeuf <[email protected]>
  37. Cc: Chen Yucong <[email protected]>
  38. Cc: Vlastimil Babka <[email protected]>
  39. Cc: Dave Hansen <[email protected]>
  40. Cc: Andy Lutomirski <[email protected]>
  41. Cc: Masami Hiramatsu <[email protected]>
  42. Cc: Paolo Bonzini <[email protected]>
  43. Cc: Andrew Morton <[email protected]>
  44. Cc: Linus Torvalds <[email protected]>
  45. Link: https://lkml.kernel.org/r/1509135945-13762-3-git-send-email-ricardo.neri-calderon@linux.intel.com
  46. (cherry picked from commit b0ce5b8c95c83a7b98c679b117e3d6ae6f97154b)
  47. Signed-off-by: Andy Whitcroft <[email protected]>
  48. Signed-off-by: Kleber Sacilotto de Souza <[email protected]>
  49. (cherry picked from commit 27c31a88c22edab269abe17c0ac7db0351d26c5f)
  50. Signed-off-by: Fabian Grünbichler <[email protected]>
  51. ---
  52. arch/x86/include/uapi/asm/processor-flags.h | 3 +++
  53. arch/x86/kernel/head_32.S | 3 ---
  54. arch/x86/kernel/head_64.S | 3 ---
  55. 3 files changed, 3 insertions(+), 6 deletions(-)
  56. diff --git a/arch/x86/include/uapi/asm/processor-flags.h b/arch/x86/include/uapi/asm/processor-flags.h
  57. index 185f3d10c194..39946d0a1d41 100644
  58. --- a/arch/x86/include/uapi/asm/processor-flags.h
  59. +++ b/arch/x86/include/uapi/asm/processor-flags.h
  60. @@ -151,5 +151,8 @@
  61. #define CX86_ARR_BASE 0xc4
  62. #define CX86_RCR_BASE 0xdc
  63. +#define CR0_STATE (X86_CR0_PE | X86_CR0_MP | X86_CR0_ET | \
  64. + X86_CR0_NE | X86_CR0_WP | X86_CR0_AM | \
  65. + X86_CR0_PG)
  66. #endif /* _UAPI_ASM_X86_PROCESSOR_FLAGS_H */
  67. diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
  68. index 337a65377baf..7bbcdb1ea31a 100644
  69. --- a/arch/x86/kernel/head_32.S
  70. +++ b/arch/x86/kernel/head_32.S
  71. @@ -213,9 +213,6 @@ ENTRY(startup_32_smp)
  72. #endif
  73. .Ldefault_entry:
  74. -#define CR0_STATE (X86_CR0_PE | X86_CR0_MP | X86_CR0_ET | \
  75. - X86_CR0_NE | X86_CR0_WP | X86_CR0_AM | \
  76. - X86_CR0_PG)
  77. movl $(CR0_STATE & ~X86_CR0_PG),%eax
  78. movl %eax,%cr0
  79. diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
  80. index a2d8541b1da4..4117c1e0b3d2 100644
  81. --- a/arch/x86/kernel/head_64.S
  82. +++ b/arch/x86/kernel/head_64.S
  83. @@ -137,9 +137,6 @@ ENTRY(secondary_startup_64)
  84. 1: wrmsr /* Make changes effective */
  85. /* Setup cr0 */
  86. -#define CR0_STATE (X86_CR0_PE | X86_CR0_MP | X86_CR0_ET | \
  87. - X86_CR0_NE | X86_CR0_WP | X86_CR0_AM | \
  88. - X86_CR0_PG)
  89. movl $CR0_STATE, %eax
  90. /* Make changes effective */
  91. movq %rax, %cr0
  92. --
  93. 2.14.2