| From foo@baz Fri Apr 27 12:10:27 CEST 2018 |
| From: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| Date: Fri, 27 Apr 2018 07:36:57 +0200 |
| Subject: s390: correct module section names for expoline code revert |
| To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, stable@vger.kernel.org |
| Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| Message-ID: <20180427053657.56944-20-schwidefsky@de.ibm.com> |
| |
| From: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| |
| [ Upstream commit 6cf09958f32b9667bb3ebadf74367c791112771b ] |
| |
| The main linker script vmlinux.lds.S for the kernel image merges |
| the expoline code patch tables into two section ".nospec_call_table" |
| and ".nospec_return_table". This is *not* done for the modules, |
| there the sections retain their original names as generated by gcc: |
| ".s390_indirect_call", ".s390_return_mem" and ".s390_return_reg". |
| |
| The module_finalize code has to check for the compiler generated |
| section names, otherwise no code patching is done. This slows down |
| the module code in case of "spectre_v2=off". |
| |
| Cc: stable@vger.kernel.org # 4.16 |
| Fixes: f19fbd5ed6 ("s390: introduce execute-trampolines for branches") |
| Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/s390/kernel/module.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/arch/s390/kernel/module.c |
| +++ b/arch/s390/kernel/module.c |
| @@ -477,11 +477,11 @@ int module_finalize(const Elf_Ehdr *hdr, |
| apply_alternatives(aseg, aseg + s->sh_size); |
| |
| if (IS_ENABLED(CONFIG_EXPOLINE) && |
| - (!strcmp(".nospec_call_table", secname))) |
| + (!strncmp(".s390_indirect", secname, 14))) |
| nospec_revert(aseg, aseg + s->sh_size); |
| |
| if (IS_ENABLED(CONFIG_EXPOLINE) && |
| - (!strcmp(".nospec_return_table", secname))) |
| + (!strncmp(".s390_return", secname, 12))) |
| nospec_revert(aseg, aseg + s->sh_size); |
| } |
| |