diff for duplicates of <20230824170623.040455914@linuxfoundation.org> diff --git a/a/1.txt b/N1/1.txt index eb062e3..4ab55fa 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,61 +1,79 @@ -5.10-stable review patch. If anyone has any objections, please let me know. +> 5.10-stable review patch. If anyone has any objections, please let me know. +> +> ------------------ +> +> From: Peter Zijlstra <peterz@infradead.org> +> +> commit dbf46008775516f7f25c95b7760041c286299783 upstream. +> +> For stack-validation of a frame-pointer build, objtool validates that +> every CALL instruction is preceded by a frame-setup. The new SRSO +> return thunks violate this with their RSB stuffing trickery. +> +> Extend the __fentry__ exception to also cover the embedded_insn case +> used for this. This cures: +> +> vmlinux.o: warning: objtool: srso_untrain_ret+0xd: call without frame pointer save/setup +> +> Fixes: 4ae68b26c3ab ("objtool/x86: Fix SRSO mess") +> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> +> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> +> Acked-by: Josh Poimboeuf <jpoimboe@kernel.org> +> Link: https://lore.kernel.org/r/20230816115921.GH980931@hirez.programming.kicks-ass.net +> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> +> --- +> tools/objtool/check.c | 17 +++++++++++------ +> 1 file changed, 11 insertions(+), 6 deletions(-) +> +> --- a/tools/objtool/check.c +> +++ b/tools/objtool/check.c +> @@ -2079,12 +2079,17 @@ static int decode_sections(struct objtoo +> return 0; +> } +> +> -static bool is_fentry_call(struct instruction *insn) +> +static bool is_special_call(struct instruction *insn) +> { +> - if (insn->type == INSN_CALL && +> - insn->call_dest && +> - insn->call_dest->fentry) +> - return true; +> + if (insn->type == INSN_CALL) { +> + struct symbol *dest = insn->call_dest; +> + +> + if (!dest) +> + return false; +> + +> + if (dest->fentry) +> + return true; +> + } +> +> return false; +> } +> @@ -2958,7 +2963,7 @@ static int validate_branch(struct objtoo +> if (ret) +> return ret; +> +> - if (!no_fp && func && !is_fentry_call(insn) && +> + if (!no_fp && func && !is_special_call(insn) && +> !has_valid_stack_frame(&state)) { +> WARN_FUNC("call without frame pointer save/setup", +> sec, insn->offset); +> +> +> ------------------- - -From: Peter Zijlstra <peterz@infradead.org> - -commit dbf46008775516f7f25c95b7760041c286299783 upstream. - -For stack-validation of a frame-pointer build, objtool validates that -every CALL instruction is preceded by a frame-setup. The new SRSO -return thunks violate this with their RSB stuffing trickery. - -Extend the __fentry__ exception to also cover the embedded_insn case -used for this. This cures: - - vmlinux.o: warning: objtool: srso_untrain_ret+0xd: call without frame pointer save/setup - -Fixes: 4ae68b26c3ab ("objtool/x86: Fix SRSO mess") -Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> -Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> -Acked-by: Josh Poimboeuf <jpoimboe@kernel.org> -Link: https://lore.kernel.org/r/20230816115921.GH980931@hirez.programming.kicks-ass.net -Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> ---- - tools/objtool/check.c | 17 +++++++++++------ - 1 file changed, 11 insertions(+), 6 deletions(-) +We still see the 'srso_untrain_ret+0xd: call without frame pointer save/setup' warning with v5.15.136. It looks like the backport might be incomplete. Is this additional change needed? +diff --git a/tools/objtool/check.c b/tools/objtool/check.c +index 36ad0b6b94a9..c3bb96e5bfa6 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c -@@ -2079,12 +2079,17 @@ static int decode_sections(struct objtoo - return 0; - } - --static bool is_fentry_call(struct instruction *insn) -+static bool is_special_call(struct instruction *insn) - { -- if (insn->type == INSN_CALL && -- insn->call_dest && -- insn->call_dest->fentry) -- return true; -+ if (insn->type == INSN_CALL) { -+ struct symbol *dest = insn->call_dest; -+ -+ if (!dest) -+ return false; -+ -+ if (dest->fentry) -+ return true; -+ } - - return false; - } -@@ -2958,7 +2963,7 @@ static int validate_branch(struct objtoo - if (ret) - return ret; +@@ -2202,7 +2202,7 @@ static bool is_special_call(struct instruction *insn) + if (!dest) + return false; -- if (!no_fp && func && !is_fentry_call(insn) && -+ if (!no_fp && func && !is_special_call(insn) && - !has_valid_stack_frame(&state)) { - WARN_FUNC("call without frame pointer save/setup", - sec, insn->offset); +- if (dest->fentry) ++ if (dest->fentry || dest->embedded_insn) + return true; + } diff --git a/a/content_digest b/N1/content_digest index 3714012..854fb5c 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,75 +1,93 @@ "ref\020230824170617.074557800@linuxfoundation.org\0" - "From\0Greg Kroah-Hartman <gregkh@linuxfoundation.org>\0" + "From\0John Sperbeck <jsperbeck@google.com>\0" "Subject\0[PATCH 5.10 134/135] objtool/x86: Fixup frame-pointer vs rethunk\0" - "Date\0Thu, 24 Aug 2023 19:10:06 +0200\0" - "To\0stable@vger.kernel.org\0" - "Cc\0Greg Kroah-Hartman <gregkh@linuxfoundation.org>" + "Date\0Tue, 24 Oct 2023 17:47:54 +0000\0" + "To\0gregkh@linuxfoundation.org\0" + "Cc\0bp@alien8.de" + jpoimboe@kernel.org patches@lists.linux.dev - Peter Zijlstra (Intel) <peterz@infradead.org> - Borislav Petkov (AMD) <bp@alien8.de> - " Josh Poimboeuf <jpoimboe@kernel.org>\0" + peterz@infradead.org + " stable@vger.kernel.org\0" "\00:1\0" "b\0" - "5.10-stable review patch. If anyone has any objections, please let me know.\n" + "> 5.10-stable review patch. If anyone has any objections, please let me know.\n" + "> \n" + "> ------------------\n" + "> \n" + "> From: Peter Zijlstra <peterz@infradead.org>\n" + "> \n" + "> commit dbf46008775516f7f25c95b7760041c286299783 upstream.\n" + "> \n" + "> For stack-validation of a frame-pointer build, objtool validates that\n" + "> every CALL instruction is preceded by a frame-setup. The new SRSO\n" + "> return thunks violate this with their RSB stuffing trickery.\n" + "> \n" + "> Extend the __fentry__ exception to also cover the embedded_insn case\n" + "> used for this. This cures:\n" + "> \n" + "> vmlinux.o: warning: objtool: srso_untrain_ret+0xd: call without frame pointer save/setup\n" + "> \n" + "> Fixes: 4ae68b26c3ab (\"objtool/x86: Fix SRSO mess\")\n" + "> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>\n" + "> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>\n" + "> Acked-by: Josh Poimboeuf <jpoimboe@kernel.org>\n" + "> Link: https://lore.kernel.org/r/20230816115921.GH980931@hirez.programming.kicks-ass.net\n" + "> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>\n" + "> ---\n" + "> tools/objtool/check.c | 17 +++++++++++------\n" + "> 1 file changed, 11 insertions(+), 6 deletions(-)\n" + "> \n" + "> --- a/tools/objtool/check.c\n" + "> +++ b/tools/objtool/check.c\n" + "> @@ -2079,12 +2079,17 @@ static int decode_sections(struct objtoo\n" + "> \treturn 0;\n" + "> }\n" + "> \n" + "> -static bool is_fentry_call(struct instruction *insn)\n" + "> +static bool is_special_call(struct instruction *insn)\n" + "> {\n" + "> -\tif (insn->type == INSN_CALL &&\n" + "> -\t insn->call_dest &&\n" + "> -\t insn->call_dest->fentry)\n" + "> -\t\treturn true;\n" + "> +\tif (insn->type == INSN_CALL) {\n" + "> +\t\tstruct symbol *dest = insn->call_dest;\n" + "> +\n" + "> +\t\tif (!dest)\n" + "> +\t\t\treturn false;\n" + "> +\n" + "> +\t\tif (dest->fentry)\n" + "> +\t\t\treturn true;\n" + "> +\t}\n" + "> \n" + "> \treturn false;\n" + "> }\n" + "> @@ -2958,7 +2963,7 @@ static int validate_branch(struct objtoo\n" + "> \t\t\tif (ret)\n" + "> \t\t\t\treturn ret;\n" + "> \n" + "> -\t\t\tif (!no_fp && func && !is_fentry_call(insn) &&\n" + "> +\t\t\tif (!no_fp && func && !is_special_call(insn) &&\n" + "> \t\t\t !has_valid_stack_frame(&state)) {\n" + "> \t\t\t\tWARN_FUNC(\"call without frame pointer save/setup\",\n" + "> \t\t\t\t\t sec, insn->offset);\n" + "> \n" + "> \n" + "> \n" "\n" - "------------------\n" - "\n" - "From: Peter Zijlstra <peterz@infradead.org>\n" - "\n" - "commit dbf46008775516f7f25c95b7760041c286299783 upstream.\n" - "\n" - "For stack-validation of a frame-pointer build, objtool validates that\n" - "every CALL instruction is preceded by a frame-setup. The new SRSO\n" - "return thunks violate this with their RSB stuffing trickery.\n" - "\n" - "Extend the __fentry__ exception to also cover the embedded_insn case\n" - "used for this. This cures:\n" - "\n" - " vmlinux.o: warning: objtool: srso_untrain_ret+0xd: call without frame pointer save/setup\n" - "\n" - "Fixes: 4ae68b26c3ab (\"objtool/x86: Fix SRSO mess\")\n" - "Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>\n" - "Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>\n" - "Acked-by: Josh Poimboeuf <jpoimboe@kernel.org>\n" - "Link: https://lore.kernel.org/r/20230816115921.GH980931@hirez.programming.kicks-ass.net\n" - "Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>\n" - "---\n" - " tools/objtool/check.c | 17 +++++++++++------\n" - " 1 file changed, 11 insertions(+), 6 deletions(-)\n" + "We still see the 'srso_untrain_ret+0xd: call without frame pointer save/setup' warning with v5.15.136. It looks like the backport might be incomplete. Is this additional change needed?\n" "\n" + "diff --git a/tools/objtool/check.c b/tools/objtool/check.c\n" + "index 36ad0b6b94a9..c3bb96e5bfa6 100644\n" "--- a/tools/objtool/check.c\n" "+++ b/tools/objtool/check.c\n" - "@@ -2079,12 +2079,17 @@ static int decode_sections(struct objtoo\n" - " \treturn 0;\n" - " }\n" - " \n" - "-static bool is_fentry_call(struct instruction *insn)\n" - "+static bool is_special_call(struct instruction *insn)\n" - " {\n" - "-\tif (insn->type == INSN_CALL &&\n" - "-\t insn->call_dest &&\n" - "-\t insn->call_dest->fentry)\n" - "-\t\treturn true;\n" - "+\tif (insn->type == INSN_CALL) {\n" - "+\t\tstruct symbol *dest = insn->call_dest;\n" - "+\n" - "+\t\tif (!dest)\n" - "+\t\t\treturn false;\n" - "+\n" - "+\t\tif (dest->fentry)\n" - "+\t\t\treturn true;\n" - "+\t}\n" - " \n" - " \treturn false;\n" - " }\n" - "@@ -2958,7 +2963,7 @@ static int validate_branch(struct objtoo\n" - " \t\t\tif (ret)\n" - " \t\t\t\treturn ret;\n" + "@@ -2202,7 +2202,7 @@ static bool is_special_call(struct instruction *insn)\n" + " \t\tif (!dest)\n" + " \t\t\treturn false;\n" " \n" - "-\t\t\tif (!no_fp && func && !is_fentry_call(insn) &&\n" - "+\t\t\tif (!no_fp && func && !is_special_call(insn) &&\n" - " \t\t\t !has_valid_stack_frame(&state)) {\n" - " \t\t\t\tWARN_FUNC(\"call without frame pointer save/setup\",\n" - " \t\t\t\t\t sec, insn->offset);" + "-\t\tif (dest->fentry)\n" + "+\t\tif (dest->fentry || dest->embedded_insn)\n" + " \t\t\treturn true;\n" + " \t}" -c14994682c4979f5f2a82f98f8f601b5ba5ada215739193bf0df8d927d4a161d +c04bd00ee3e468ef4578e02f26317dcb5045a5a6d08ba24b8c4f36762f3ed4e0
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.