On 6/9/2021 8:17 AM, Dave Martin wrote:
On Fri, Jun 04, 2021 at 12:24:50PM +0100, Mark Brown wrote:
Since we have added an is_interp flag to arch_parse_elf_property() we can
drop the has_interp flag from arch_elf_adjust_prot(), the only user was
the arm64 code which no longer needs it and any future users will be able
to use arch_parse_elf_properties() to determine if an interpreter is in
use.
So far so good, but can we also drop the has_interp argument from
arch_parse_elf_properties()?
Cross-check with Yu-Cheng Yu's series, but I don't see this being used
any more (except for passthrough in binfmt_elf.c).
Since we are treating the interpreter and main executable orthogonally
to each other now, I don't think we should need a has_interp argument to
pass knowledge between the interpreter and executable handling phases
here.
For CET, arch_parse_elf_property() needs to know has_interp and
is_interp. Like the following, on top of your patches:
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
index 607b782afe2c..9e6f142b5cef 100644
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
@@ -837,8 +837,15 @@ unsigned long KSTK_ESP(struct task_struct *task)
}
int arch_parse_elf_property(u32 type, const void *data, size_t datasz,
- bool compat, struct arch_elf_state *state)
+ bool compat, bool has_interp, bool is_interp,
+ struct arch_elf_state *state)
{
+ /*
+ * Parse static-linked executable or the loader.
+ */
+ if (has_interp != is_interp)
+ return 0;
+
if (type != GNU_PROPERTY_X86_FEATURE_1_AND)
return 0;
Thanks,
Yu-cheng