Patch "objtool: Add support for alternatives at the end of a section" has been added to the 4.14-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
objtool: Add support for alternatives at the end of a section
to the 4.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
objtool_Add_support_for_alternatives_at_the_end_of_a_section.patch
and it can be found in the queue-4.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Subject: objtool: Add support for alternatives at the end of a section
From: Josh Poimboeuf [email protected]
Date: Mon Jan 29 22:00:40 2018 -0600
From: Josh Poimboeuf [email protected]
commit 17bc33914bcc98ba3c6b426fd1c49587a25c0597
Now that the previous patch gave objtool the ability to read retpoline alternatives, it shows a new warning:
arch/x86/entry/entry_64.o: warning: objtool: .entry_trampoline: don't know how to handle alternatives at end of section
This is due to the JMP_NOSPEC in entry_SYSCALL_64_trampoline().
Previously, objtool ignored this situation because it wasn't needed, and it would have required a bit of extra code. Now that this case exists, add proper support for it.
--- tools/objtool/check.c | 53 +++++++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 22 deletions(-)
tools/objtool/check.c +31 -22
@@ -594,7 +594,7 @@ static int handle_group_alt(struct objtostruct instruction *orig_insn, struct instruction **new_insn) { - struct instruction *last_orig_insn, *last_new_insn, *insn, *fake_jump; + struct instruction *last_orig_insn, *last_new_insn, *insn, *fake_jump = NULL;unsigned long dest_off; last_orig_insn =NULL ;
@@ -610,28 +610,30 @@ static int handle_group_alt(struct objto last_orig_insn = insn; } -if (!next_insn_same_sec (file, last_orig_insn)) { -WARN ("%s: don't know how to handle alternatives at end of section" , - special_alt->orig_sec->name); -return -1 ; - } - - fake_jump =malloc (sizeof (*fake_jump)); -if (!fake_jump) { -WARN ("malloc failed" ); -return -1 ; +if (next_insn_same_sec (file, last_orig_insn)) { + fake_jump =malloc (sizeof (*fake_jump)); +if (!fake_jump) { +WARN ("malloc failed" ); +return -1 ; + } +memset (fake_jump,0 ,sizeof (*fake_jump)); +INIT_LIST_HEAD (&fake_jump->alts); +clear_insn_state (&fake_jump->state); + + fake_jump->sec = special_alt->new_sec; + fake_jump->offset =-1 ; + fake_jump->type =INSN_JUMP_UNCONDITIONAL ; + fake_jump->jump_dest =list_next_entry (last_orig_insn, list); + fake_jump->ignore = true; } -memset (fake_jump,0 ,sizeof (*fake_jump)); -INIT_LIST_HEAD (&fake_jump->alts); -clear_insn_state (&fake_jump->state); - - fake_jump->sec = special_alt->new_sec; - fake_jump->offset =-1 ; - fake_jump->type =INSN_JUMP_UNCONDITIONAL ; - fake_jump->jump_dest =list_next_entry (last_orig_insn, list); - fake_jump->ignore = true;if (!special_alt->new_len) { +if (!fake_jump) { +WARN ("%s: empty alternative at end of section" , + special_alt->orig_sec->name); +return -1 ; + } + *new_insn = fake_jump;return 0 ; }
@@ -654,8 +656,14 @@ static int handle_group_alt(struct objtocontinue ; dest_off = insn->offset + insn->len + insn->immediate; -if (dest_off == special_alt->new_off + special_alt->new_len) +if (dest_off == special_alt->new_off + special_alt->new_len) { +if (!fake_jump) { +WARN ("%s: alternative jump to end of section" , + special_alt->orig_sec->name); +return -1 ; + } insn->jump_dest = fake_jump; + }if (!insn->jump_dest) { WARN_FUNC("can't find alternative jump destination",
@@ -670,7 +678,8 @@ static int handle_group_alt(struct objtoreturn -1 ; } -list_add (&fake_jump->list, &last_new_insn->list); +if (fake_jump) +list_add (&fake_jump->list, &last_new_insn->list);return 0 ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.14/objtool_Add_support_for_alternatives_at_the_end_of_a_section.patch queue-4.14/x86paravirt_Remove_noreplace-paravirt_cmdline_option.patch queue-4.14/KVM_VMX_Make_indirect_call_speculation_safe.patch queue-4.14/x86alternative_Print_unadorned_pointers.patch queue-4.14/x86retpoline_Remove_the_esprsp_thunk.patch queue-4.14/x86bugs_Drop_one_mitigation_from_dmesg.patch queue-4.14/x86nospec_Fix_header_guards_names.patch queue-4.14/KVM_x86_Make_indirect_calls_in_emulator_speculation_safe.patch queue-4.14/objtool_Warn_on_stripped_section_symbol.patch queue-4.14/objtool_Improve_retpoline_alternative_handling.patch