From patchwork Mon Jun 14 22:32:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Brown X-Patchwork-Id: 43848 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 674D73833028 for ; Mon, 14 Jun 2021 22:34:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 674D73833028 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1623710051; bh=hTkfsH2BQjNszYDmyQdui20jwT96RBRzTWMgguqf4Bs=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=OelaSgoBCM7qK96hCzvU7PbJ6jILWgNraRZXnKpcmH254QGIvf3EJWgxnmUPUZF/z QYAnAukgiX83FG9tT3rXRdR9fOI8YsCTh08Z6c44BB53Ax33F029czz8ZFXl+PK19J eW1/nX0QeuuOsWPm9gMFWQEapIEoxnm3yVSEtVgk= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by sourceware.org (Postfix) with ESMTPS id B6BBB384842C for ; Mon, 14 Jun 2021 22:33:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B6BBB384842C Received: by mail.kernel.org (Postfix) with ESMTPSA id 5C5966124B; Mon, 14 Jun 2021 22:33:06 +0000 (UTC) To: Catalin Marinas , Will Deacon Subject: [PATCH v3 1/4] elf: Allow architectures to parse properties on the main executable Date: Mon, 14 Jun 2021 23:32:11 +0100 Message-Id: <20210614223214.39011-2-broonie@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210614223214.39011-1-broonie@kernel.org> References: <20210614223214.39011-1-broonie@kernel.org> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=5964; h=from:subject; bh=7WHZORg/W6I1gTPvY3Q95MjVz4fRSWdsaCUBHk8wyhY=; b=owEBbQGS/pANAwAKASTWi3JdVIfQAcsmYgBgx9jq2oNsGLcaZjVsA4F99PsgMw2i4A3A6jXdEM0c Xc0ZiPuJATMEAAEKAB0WIQSt5miqZ1cYtZ/in+ok1otyXVSH0AUCYMfY6gAKCRAk1otyXVSH0EI/B/ 9zA+2LOdD5wyO3IW259lAj4GkijndIe+g3MvUSqjlZUIjkUbble0vK6y1jm3aozwlxY87mQC6feK5D 6iQJI/RVX6Wks8aoycieH8rRgqTl7iCQ588OhNQ1cP+AIUaRmZZzQ0/sHqj6Mtl/vrhJnVH8XV+5gd yurAGtuY9FV31VQt9kBs8ucK2qp8cWcYtI/tAvJU+H+KF7Nrr9LbBEI6r8DNcTEd5A3tNwIZI07VwP fvD4PBWJggXp5oNberirXf8vAQRpmZi2fqgi3INDDNZ5GcWKb3vz6OUOrFf0r9/C38EDkRqrkIIheY RwWQ7DmxDUZiE3wZnRuQ3wHWlHexmG X-Developer-Key: i=broonie@kernel.org; a=openpgp; fpr=3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB X-Spam-Status: No, score=-10.7 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Mark Brown via Libc-alpha From: Mark Brown Reply-To: Mark Brown Cc: linux-arch@vger.kernel.org, Yu-cheng Yu , libc-alpha@sourceware.org, Szabolcs Nagy , Jeremy Linton , Mark Brown , Dave Martin , linux-arm-kernel@lists.infradead.org Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Currently the ELF code only attempts to parse properties on the image that will start execution, either the interpreter or for statically linked executables the main executable. The expectation is that any property handling for the main executable will be done by the interpreter. This is a bit inconsistent since we do map the executable and is causing problems for the arm64 BTI support when used in conjunction with systemd's use of seccomp to implement MemoryDenyWriteExecute which stops the dynamic linker adjusting the permissions of executable segments. Allow architectures to handle properties for both the dynamic linker and main executable, adjusting arch_parse_elf_properties() to have an is_interp flag as with arch_elf_adjust_prot() and calling it for both the main executable and any intepreter. Signed-off-by: Mark Brown --- arch/arm64/include/asm/elf.h | 3 ++- fs/binfmt_elf.c | 31 +++++++++++++++++++++++-------- include/linux/elf.h | 4 +++- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index 8d1c8dcb87fd..a488a1329b16 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -261,6 +261,7 @@ struct arch_elf_state { static inline int arch_parse_elf_property(u32 type, const void *data, size_t datasz, bool compat, + bool has_interp, bool is_interp, struct arch_elf_state *arch) { /* No known properties for AArch32 yet */ @@ -273,7 +274,7 @@ static inline int arch_parse_elf_property(u32 type, const void *data, if (datasz != sizeof(*p)) return -ENOEXEC; - if (system_supports_bti() && + if (system_supports_bti() && has_interp == is_interp && (*p & GNU_PROPERTY_AARCH64_FEATURE_1_BTI)) arch->flags |= ARM64_ELF_BTI; } diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index 187b3f2b9202..c0d4f35c80f6 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -716,8 +716,9 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex, */ static int parse_elf_property(const char *data, size_t *off, size_t datasz, - struct arch_elf_state *arch, - bool have_prev_type, u32 *prev_type) + struct arch_elf_state *arch, bool has_interp, + bool is_interp, bool have_prev_type, + u32 *prev_type) { size_t o, step; const struct gnu_property *pr; @@ -751,7 +752,8 @@ static int parse_elf_property(const char *data, size_t *off, size_t datasz, *prev_type = pr->pr_type; ret = arch_parse_elf_property(pr->pr_type, data + o, - pr->pr_datasz, ELF_COMPAT, arch); + pr->pr_datasz, ELF_COMPAT, + has_interp, is_interp, arch); if (ret) return ret; @@ -764,6 +766,7 @@ static int parse_elf_property(const char *data, size_t *off, size_t datasz, #define NOTE_NAME_SZ (sizeof(GNU_PROPERTY_TYPE_0_NAME)) static int parse_elf_properties(struct file *f, const struct elf_phdr *phdr, + bool has_interp, bool is_interp, struct arch_elf_state *arch) { union { @@ -813,7 +816,8 @@ static int parse_elf_properties(struct file *f, const struct elf_phdr *phdr, have_prev_type = false; do { ret = parse_elf_property(note.data, &off, datasz, arch, - have_prev_type, &prev_type); + has_interp, is_interp, have_prev_type, + &prev_type); have_prev_type = true; } while (!ret); @@ -828,6 +832,7 @@ static int load_elf_binary(struct linux_binprm *bprm) unsigned long error; struct elf_phdr *elf_ppnt, *elf_phdata, *interp_elf_phdata = NULL; struct elf_phdr *elf_property_phdata = NULL; + struct elf_phdr *interp_elf_property_phdata = NULL; unsigned long elf_bss, elf_brk; int bss_prot = 0; int retval, i; @@ -936,6 +941,10 @@ static int load_elf_binary(struct linux_binprm *bprm) executable_stack = EXSTACK_DISABLE_X; break; + case PT_GNU_PROPERTY: + elf_property_phdata = elf_ppnt; + break; + case PT_LOPROC ... PT_HIPROC: retval = arch_elf_pt_proc(elf_ex, elf_ppnt, bprm->file, false, @@ -963,12 +972,11 @@ static int load_elf_binary(struct linux_binprm *bprm) goto out_free_dentry; /* Pass PT_LOPROC..PT_HIPROC headers to arch code */ - elf_property_phdata = NULL; elf_ppnt = interp_elf_phdata; for (i = 0; i < interp_elf_ex->e_phnum; i++, elf_ppnt++) switch (elf_ppnt->p_type) { case PT_GNU_PROPERTY: - elf_property_phdata = elf_ppnt; + interp_elf_property_phdata = elf_ppnt; break; case PT_LOPROC ... PT_HIPROC: @@ -979,10 +987,17 @@ static int load_elf_binary(struct linux_binprm *bprm) goto out_free_dentry; break; } + + retval = parse_elf_properties(interpreter, + interp_elf_property_phdata, + true, true, &arch_state); + if (retval) + goto out_free_dentry; + } - retval = parse_elf_properties(interpreter ?: bprm->file, - elf_property_phdata, &arch_state); + retval = parse_elf_properties(bprm->file, elf_property_phdata, + interpreter != NULL, false, &arch_state); if (retval) goto out_free_dentry; diff --git a/include/linux/elf.h b/include/linux/elf.h index c9a46c4e183b..1c45ecf29147 100644 --- a/include/linux/elf.h +++ b/include/linux/elf.h @@ -88,13 +88,15 @@ struct arch_elf_state; #ifndef CONFIG_ARCH_USE_GNU_PROPERTY static inline int arch_parse_elf_property(u32 type, const void *data, size_t datasz, bool compat, + bool has_interp, bool is_interp, struct arch_elf_state *arch) { return 0; } #else extern int arch_parse_elf_property(u32 type, const void *data, size_t datasz, - bool compat, struct arch_elf_state *arch); + bool compat, bool has_interp, bool is_interp, + struct arch_elf_state *arch); #endif #ifdef CONFIG_ARCH_HAVE_ELF_PROT From patchwork Mon Jun 14 22:32:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Brown X-Patchwork-Id: 43849 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 385CB394FC32 for ; Mon, 14 Jun 2021 22:34:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 385CB394FC32 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1623710095; bh=eXm9AhJz15DtiN9JHHFP0pIvQkUEks2JsrIi+Af/1gg=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=K3n7Iz79UDtz8lCXj8aniq8nDhUoXD1YZAbfzdG+NBbNrXuOSHWhb+YFTX4zudniW Qes9CRrBjOMZQKO0saMpGbDmMRZFv+j1O+FcL+gxDyiXRuHIOCzZw9SGo3soAzlQU2 b/TrVqXC2jpBrjvh8gz4+B/p2rV0CmfQjzz9PZX8= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by sourceware.org (Postfix) with ESMTPS id 338743835409 for ; Mon, 14 Jun 2021 22:33:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 338743835409 Received: by mail.kernel.org (Postfix) with ESMTPSA id 26C5061350; Mon, 14 Jun 2021 22:33:08 +0000 (UTC) To: Catalin Marinas , Will Deacon Subject: [PATCH v3 2/4] arm64: Enable BTI for main executable as well as the interpreter Date: Mon, 14 Jun 2021 23:32:12 +0100 Message-Id: <20210614223214.39011-3-broonie@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210614223214.39011-1-broonie@kernel.org> References: <20210614223214.39011-1-broonie@kernel.org> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3373; h=from:subject; bh=17k+MoyNqJzjgGdNm9vWTmTrX55pYmEUuacR3oROtGc=; b=owEBbQGS/pANAwAKASTWi3JdVIfQAcsmYgBgx9jrQwZiPSdRs/BCvcJegZDLgaOo3lU/tk5go+kw +KrIJRyJATMEAAEKAB0WIQSt5miqZ1cYtZ/in+ok1otyXVSH0AUCYMfY6wAKCRAk1otyXVSH0Dt3B/ 9gbtsNgGoILSpsLB1V/Ykg9QDHZUdvpmJIO6J131l/HOYdFFyXRYlAvXPmiQTL2LYg3YNtuGplzd+h nefV7uBs+s2uO3w96j14BkRycwYPTSnpH2M2AYqURcsfBF6JPoXzBcAepB/WGG4wqICltrMFmTk1tn mvzRui//tTOa5O4gionTkSd26b87u2oJlqUNQOJZ7gGNXgZxCSLAprT5RP5PK6f27LEoYYXygcVK9S AcY8za6+3vdXyo5777gKo559Ih4+A0pmo/0Zy1WZUYKf0oAapPwPoXNHrfTaTyytLO486ee/dGMpGf MFekzKI7szXUVWMrSwWhPmwiYmKpz7 X-Developer-Key: i=broonie@kernel.org; a=openpgp; fpr=3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Mark Brown via Libc-alpha From: Mark Brown Reply-To: Mark Brown Cc: linux-arch@vger.kernel.org, Yu-cheng Yu , libc-alpha@sourceware.org, Szabolcs Nagy , Jeremy Linton , Mark Brown , Dave Martin , linux-arm-kernel@lists.infradead.org Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Currently for dynamically linked ELF executables we only enable BTI for the interpreter, expecting the interpreter to do this for the main executable. This is a bit inconsistent since we do map main executable and is causing issues with systemd's MemoryDenyWriteExecute feature which is implemented using a seccomp filter which prevents setting PROT_EXEC on already mapped memory and lacks the context to be able to detect that memory is already mapped with PROT_EXEC. Resolve this by checking the BTI property for the main executable and enabling BTI if it is present when doing the initial mapping. This does mean that we may get more code with BTI enabled if running on a system without BTI support in the dynamic linker, this is expected to be a safe configuration and testing seems to confirm that. It also reduces the flexibility userspace has to disable BTI but it is expected that for cases where there are problems which require BTI to be disabled it is more likely that it will need to be disabled on a system level. Signed-off-by: Mark Brown Reviewed-by: Dave Martin --- arch/arm64/include/asm/elf.h | 14 ++++++++++---- arch/arm64/kernel/process.c | 23 +++++++++++------------ 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index a488a1329b16..9f86dbce2680 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -253,7 +253,8 @@ struct arch_elf_state { int flags; }; -#define ARM64_ELF_BTI (1 << 0) +#define ARM64_ELF_INTERP_BTI (1 << 0) +#define ARM64_ELF_EXEC_BTI (1 << 1) #define INIT_ARCH_ELF_STATE { \ .flags = 0, \ @@ -274,9 +275,14 @@ static inline int arch_parse_elf_property(u32 type, const void *data, if (datasz != sizeof(*p)) return -ENOEXEC; - if (system_supports_bti() && has_interp == is_interp && - (*p & GNU_PROPERTY_AARCH64_FEATURE_1_BTI)) - arch->flags |= ARM64_ELF_BTI; + if (system_supports_bti() && + (*p & GNU_PROPERTY_AARCH64_FEATURE_1_BTI)) { + if (is_interp) { + arch->flags |= ARM64_ELF_INTERP_BTI; + } else { + arch->flags |= ARM64_ELF_EXEC_BTI; + } + } } return 0; diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c index b4bb67f17a2c..21f1f0997c43 100644 --- a/arch/arm64/kernel/process.c +++ b/arch/arm64/kernel/process.c @@ -741,21 +741,20 @@ asmlinkage void __sched arm64_preempt_schedule_irq(void) } #ifdef CONFIG_BINFMT_ELF -int arch_elf_adjust_prot(int prot, const struct arch_elf_state *state, - bool has_interp, bool is_interp) +static inline int arm64_elf_bti_flag(bool is_interp) { - /* - * For dynamically linked executables the interpreter is - * responsible for setting PROT_BTI on everything except - * itself. - */ - if (is_interp != has_interp) - return prot; + if (is_interp) + return ARM64_ELF_INTERP_BTI; + else + return ARM64_ELF_EXEC_BTI; +} - if (!(state->flags & ARM64_ELF_BTI)) - return prot; - if (prot & PROT_EXEC) +int arch_elf_adjust_prot(int prot, const struct arch_elf_state *state, + bool has_interp, bool is_interp) +{ + if ((prot & PROT_EXEC) && + (state->flags & arm64_elf_bti_flag(is_interp))) prot |= PROT_BTI; return prot; From patchwork Mon Jun 14 22:32:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Brown X-Patchwork-Id: 43850 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 12E07394D89C for ; Mon, 14 Jun 2021 22:35:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 12E07394D89C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1623710139; bh=4yCmun+k9w10xlAv8Q5ssMer4f8rS0c9eTHLCNH4rAE=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=tvbtqT+TTGRaB6uHFgbp9QBkr24f+3zuFDksUdbM0Dmd9CLejcI4OfhRRfx3F2eVa VGWvGIRJBdMr1XsaxztjB00RX09FP6cZHI0hsXKNpa3fMuPthvu8DxPZ99y7U+U1eS NCu4roZxlzImxvMLzvYIvOn3q/8dGqjhExVIIhb8= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by sourceware.org (Postfix) with ESMTPS id 670DB388CC12 for ; Mon, 14 Jun 2021 22:33:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 670DB388CC12 Received: by mail.kernel.org (Postfix) with ESMTPSA id 02B52611CE; Mon, 14 Jun 2021 22:33:11 +0000 (UTC) To: Catalin Marinas , Will Deacon Subject: [PATCH v3 3/4] elf: Remove has_interp property from arch_adjust_elf_prot() Date: Mon, 14 Jun 2021 23:32:13 +0100 Message-Id: <20210614223214.39011-4-broonie@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210614223214.39011-1-broonie@kernel.org> References: <20210614223214.39011-1-broonie@kernel.org> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2151; h=from:subject; bh=fCxAxBsrdCysAQR8O0YHtW9cXxwUrKw65hU1mQ0qWk0=; b=owEBbQGS/pANAwAKASTWi3JdVIfQAcsmYgBgx9jscT/tjOsyDA4fqAk63t8+zhdRqo/okAQGtBab 6GkwKRSJATMEAAEKAB0WIQSt5miqZ1cYtZ/in+ok1otyXVSH0AUCYMfY7AAKCRAk1otyXVSH0Fv8B/ 9n4MxOkwE08+s1KuYDbXW8HmGkcSrRsnbokMnx4O6yqCfYunlNP76yiYDisbWcziywvhtxfnNfd3pG MYFI38kzyTwwFnUI+avkO91uGTO1ywrvkZ67dJ+h+cfIK/FJDWy5v3ZGvmeAIZPwqUgtZ16HDp75PD ckdcB5aWS9v8nFz5mMJYUPBcpX7ZqmkNSqJlwoJ3qc4gx4jqYMKuh6PDucY6ZsCa7Qnu/8Qfig+4jL DYu83xz4morL6efeTNRbXvgPcD+gECGDAck4Ty62ZNxVeqK7yKCoilNmzgWQh3cKmFaW/tE9e3ED08 05qalJGq9fFljHagQoBM6gIFC4qGSB X-Developer-Key: i=broonie@kernel.org; a=openpgp; fpr=3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Mark Brown via Libc-alpha From: Mark Brown Reply-To: Mark Brown Cc: linux-arch@vger.kernel.org, Yu-cheng Yu , libc-alpha@sourceware.org, Szabolcs Nagy , Jeremy Linton , Mark Brown , Dave Martin , linux-arm-kernel@lists.infradead.org Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" 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. Signed-off-by: Mark Brown --- arch/arm64/kernel/process.c | 2 +- fs/binfmt_elf.c | 2 +- include/linux/elf.h | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c index 21f1f0997c43..2b952593534a 100644 --- a/arch/arm64/kernel/process.c +++ b/arch/arm64/kernel/process.c @@ -751,7 +751,7 @@ static inline int arm64_elf_bti_flag(bool is_interp) int arch_elf_adjust_prot(int prot, const struct arch_elf_state *state, - bool has_interp, bool is_interp) + bool is_interp) { if ((prot & PROT_EXEC) && (state->flags & arm64_elf_bti_flag(is_interp))) diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index c0d4f35c80f6..ffe38d54308b 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -580,7 +580,7 @@ static inline int make_prot(u32 p_flags, struct arch_elf_state *arch_state, if (p_flags & PF_X) prot |= PROT_EXEC; - return arch_elf_adjust_prot(prot, arch_state, has_interp, is_interp); + return arch_elf_adjust_prot(prot, arch_state, is_interp); } /* This is much more generalized than the library routine read function, diff --git a/include/linux/elf.h b/include/linux/elf.h index 1c45ecf29147..d8392531899d 100644 --- a/include/linux/elf.h +++ b/include/linux/elf.h @@ -101,11 +101,11 @@ extern int arch_parse_elf_property(u32 type, const void *data, size_t datasz, #ifdef CONFIG_ARCH_HAVE_ELF_PROT int arch_elf_adjust_prot(int prot, const struct arch_elf_state *state, - bool has_interp, bool is_interp); + bool is_interp); #else static inline int arch_elf_adjust_prot(int prot, const struct arch_elf_state *state, - bool has_interp, bool is_interp) + bool is_interp) { return prot; } From patchwork Mon Jun 14 22:32:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Brown X-Patchwork-Id: 43851 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8B39D394FC06 for ; Mon, 14 Jun 2021 22:36:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8B39D394FC06 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1623710183; bh=957/WbHZwwAwPaDam8HYSY5e3uvhHkZT+U9YPmVB/AA=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=BJYZwgnplD3YV20SnDfrtzTw0EJeJ0JmoRwPzC1sGrryMOkdZ96FZOT1Gyg2ZNf8+ WY46Jzh/7vwAHtRpoNjXRZAAtmnHwM34CD/cvl2YXvFUiSbMtYaWipPIXgue1BlMMz mSyzo78iyH/QWofUWhLAl+PUyBE7s/Wz2P//fdeM= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by sourceware.org (Postfix) with ESMTPS id 28B513835409 for ; Mon, 14 Jun 2021 22:33:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 28B513835409 Received: by mail.kernel.org (Postfix) with ESMTPSA id B398461350; Mon, 14 Jun 2021 22:33:14 +0000 (UTC) To: Catalin Marinas , Will Deacon Subject: [PATCH v3 4/4] elf: Remove has_interp property from arch_parse_elf_property() Date: Mon, 14 Jun 2021 23:32:14 +0100 Message-Id: <20210614223214.39011-5-broonie@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210614223214.39011-1-broonie@kernel.org> References: <20210614223214.39011-1-broonie@kernel.org> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2046; h=from:subject; bh=dADxCcnOfO3ZUnZ9a2fEumgqIOKICC14vf9CSy6vgv0=; b=owEBbQGS/pANAwAKASTWi3JdVIfQAcsmYgBgx9jthwgmlfRA1jM91GkX7mG7mC714J/VsA8WtqyN FwHJzzqJATMEAAEKAB0WIQSt5miqZ1cYtZ/in+ok1otyXVSH0AUCYMfY7QAKCRAk1otyXVSH0Px6B/ 9ZQmIoNj/Fsbx5yBcfBfa7aW1jNFB1wAIMpAythc7L3lyflO+/Uo83KH38OzRCi72aZPXNs89O8hk/ z5KFmFFHmgUhxh++V1Uv6+JML3VbsAk4QeaW6LNwE1JlfMB6WPk4lKdlqRW1V0jo8Wl5zL2CbzsKlq skmLKgudOy6QdcUTdZ62XOROXUIDtYl9HIBqx0295UpAcHTYH7XnrUWz571gJH1RozGZPoz0/gQcRJ rQvOGo3ncDf6amtTmrO4k7JyO0rtQ5op4tXC6y6fyJ9rr8se4lVLKkDWs1rPvewsDj42iVEY86NJoT cj0wVnj4CIRpZ8Mn2W4lcJTDzZl4Nb X-Developer-Key: i=broonie@kernel.org; a=openpgp; fpr=3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Mark Brown via Libc-alpha From: Mark Brown Reply-To: Mark Brown Cc: linux-arch@vger.kernel.org, Yu-cheng Yu , libc-alpha@sourceware.org, Szabolcs Nagy , Jeremy Linton , Mark Brown , Dave Martin , linux-arm-kernel@lists.infradead.org Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Since all current users of arch_parse_elf_property() are able to treat the interpreter and main executable orthogonaly the has_interp argument is now redundant so remove it. Signed-off-by: Mark Brown --- arch/arm64/include/asm/elf.h | 2 +- fs/binfmt_elf.c | 2 +- include/linux/elf.h | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index 9f86dbce2680..a6e9032b951a 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -262,7 +262,7 @@ struct arch_elf_state { static inline int arch_parse_elf_property(u32 type, const void *data, size_t datasz, bool compat, - bool has_interp, bool is_interp, + bool is_interp, struct arch_elf_state *arch) { /* No known properties for AArch32 yet */ diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index ffe38d54308b..5509ae63c2e1 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -753,7 +753,7 @@ static int parse_elf_property(const char *data, size_t *off, size_t datasz, ret = arch_parse_elf_property(pr->pr_type, data + o, pr->pr_datasz, ELF_COMPAT, - has_interp, is_interp, arch); + is_interp, arch); if (ret) return ret; diff --git a/include/linux/elf.h b/include/linux/elf.h index d8392531899d..cdb080d4b34a 100644 --- a/include/linux/elf.h +++ b/include/linux/elf.h @@ -88,14 +88,14 @@ struct arch_elf_state; #ifndef CONFIG_ARCH_USE_GNU_PROPERTY static inline int arch_parse_elf_property(u32 type, const void *data, size_t datasz, bool compat, - bool has_interp, bool is_interp, + bool is_interp, struct arch_elf_state *arch) { return 0; } #else extern int arch_parse_elf_property(u32 type, const void *data, size_t datasz, - bool compat, bool has_interp, bool is_interp, + bool compat, bool is_interp, struct arch_elf_state *arch); #endif