Tested-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+[ pawan: backport: Bring ITS dynamic thunk code under CONFIG_MODULES ]
+Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
- arch/x86/kernel/alternative.c | 6 ++++++
- 1 file changed, 6 insertions(+)
+ arch/x86/kernel/alternative.c | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
-@@ -129,7 +129,9 @@ const unsigned char * const x86_nops[ASM
+@@ -129,6 +129,7 @@ const unsigned char * const x86_nops[ASM
#ifdef CONFIG_MITIGATION_ITS
+#ifdef CONFIG_MODULES
static struct module *its_mod;
-+#endif
static void *its_page;
static unsigned int its_offset;
-
-@@ -150,6 +152,7 @@ static void *its_init_thunk(void *thunk,
+@@ -244,7 +245,16 @@ static void *its_allocate_thunk(int reg)
return thunk;
}
-+#ifdef CONFIG_MODULES
- void its_init_mod(struct module *mod)
- {
- if (!cpu_feature_enabled(X86_FEATURE_INDIRECT_THUNK_ITS))
-@@ -188,6 +191,7 @@ void its_free_mod(struct module *mod)
- }
- kfree(mod->its_page_array);
- }
+-#endif
++#else /* CONFIG_MODULES */
++
++static void *its_allocate_thunk(int reg)
++{
++ return NULL;
++}
++
+#endif /* CONFIG_MODULES */
++
++#endif /* CONFIG_MITIGATION_ITS */
- DEFINE_FREE(its_execmem, void *, if (_T) module_memfree(_T));
-
-@@ -198,6 +202,7 @@ static void *its_alloc(void)
- if (!page)
- return NULL;
-
-+#ifdef CONFIG_MODULES
- if (its_mod) {
- void *tmp = krealloc(its_mod->its_page_array,
- (its_mod->its_num_pages+1) * sizeof(void *),
-@@ -208,6 +213,7 @@ static void *its_alloc(void)
- its_mod->its_page_array = tmp;
- its_mod->its_page_array[its_mod->its_num_pages++] = page;
- }
-+#endif /* CONFIG_MODULES */
-
- return no_free_ptr(page);
- }
+ /*
+ * Fill the buffer with a single effective instruction of size @len.