From patchwork Tue May 8 20:40:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 910479 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-92292-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="vX+6JHRO"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40gWfW2Cs7z9s3G for ; Wed, 9 May 2018 06:43:31 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references; q=dns; s=default; b=mirUjZandOrcSPhajjzHRtrRncshlgC ItRZdzAAjNzqV2ZWjpK9l/KX5zg96xo8Veih9WqR8fUF5gsUYvGKOTLhfzvJYaW9 tRREpuIvSWMDo81nikWTxZ9d23pM7UmjEDWdvZVcoDekkM+Z9qejgf9itVpPtyfV IM+t82zbYfcE= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references; s=default; bh=BZIIaOjFNpGYwT8bppdVkbsYjN8=; b=vX+6J HROWLngoxnV3+bCVcq5GTt/2cc0AZAui4rVIUbYn6HJY17eEt0eWbGQsBKO2YX1/ p2JyZwcpq9vrJFyDegJneXO4zh9aeelXEZTYpXNqr3Q5bSlbGLNxGoWhbRNq/PRE satHWToOFqr99fmdcgTLjahOfSVoBWlSNC2Kpc= Received: (qmail 78067 invoked by alias); 8 May 2018 20:40:42 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 76751 invoked by uid 89); 8 May 2018 20:40:34 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.7 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_SOFTFAIL autolearn=ham version=3.3.2 spammy= X-HELO: mga11.intel.com X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 From: "H.J. Lu" To: libc-alpha@sourceware.org Cc: Carlos O'Donell Subject: [PATCH 05/23] x86: Add _CET_ENDBR to functions in dl-tlsdesc.S Date: Tue, 8 May 2018 13:40:03 -0700 Message-Id: <20180508204021.31845-6-hjl.tools@gmail.com> In-Reply-To: <20180508204021.31845-1-hjl.tools@gmail.com> References: <20180508204021.31845-1-hjl.tools@gmail.com> Add _CET_ENDBR to functions in dl-tlsdesc.S, which are called indirectly, to support IBT. Tested on i686 and x86-64. * sysdeps/i386/dl-tlsdesc.S (_dl_tlsdesc_return): Add _CET_ENDBR. (_dl_tlsdesc_undefweak): Likewise. (_dl_tlsdesc_dynamic): Likewise. (_dl_tlsdesc_resolve_abs_plus_addend): Likewise. (_dl_tlsdesc_resolve_rel): Likewise. (_dl_tlsdesc_resolve_rela): Likewise. (_dl_tlsdesc_resolve_hold): Likewise. * sysdeps/x86_64/dl-tlsdesc.S (_dl_tlsdesc_return): Likewise. (_dl_tlsdesc_undefweak): Likewise. (_dl_tlsdesc_dynamic): Likewise. (_dl_tlsdesc_resolve_rela): Likewise. (_dl_tlsdesc_resolve_hold): Likewise. --- sysdeps/i386/dl-tlsdesc.S | 7 +++++++ sysdeps/x86_64/dl-tlsdesc.S | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/sysdeps/i386/dl-tlsdesc.S b/sysdeps/i386/dl-tlsdesc.S index 2c4764d1aa..128f0af318 100644 --- a/sysdeps/i386/dl-tlsdesc.S +++ b/sysdeps/i386/dl-tlsdesc.S @@ -37,6 +37,7 @@ cfi_startproc .align 16 _dl_tlsdesc_return: + _CET_ENDBR movl 4(%eax), %eax ret cfi_endproc @@ -58,6 +59,7 @@ _dl_tlsdesc_return: cfi_startproc .align 16 _dl_tlsdesc_undefweak: + _CET_ENDBR movl 4(%eax), %eax subl %gs:0, %eax ret @@ -99,6 +101,7 @@ _dl_tlsdesc_dynamic (struct tlsdesc *tdp) cfi_startproc .align 16 _dl_tlsdesc_dynamic: + _CET_ENDBR /* Like all TLS resolvers, preserve call-clobbered registers. We need two scratch regs anyway. */ subl $28, %esp @@ -154,6 +157,7 @@ _dl_tlsdesc_dynamic: .align 16 _dl_tlsdesc_resolve_abs_plus_addend: 0: + _CET_ENDBR pushl %eax cfi_adjust_cfa_offset (4) pushl %ecx @@ -192,6 +196,7 @@ _dl_tlsdesc_resolve_abs_plus_addend: .align 16 _dl_tlsdesc_resolve_rel: 0: + _CET_ENDBR pushl %eax cfi_adjust_cfa_offset (4) pushl %ecx @@ -230,6 +235,7 @@ _dl_tlsdesc_resolve_rel: .align 16 _dl_tlsdesc_resolve_rela: 0: + _CET_ENDBR pushl %eax cfi_adjust_cfa_offset (4) pushl %ecx @@ -268,6 +274,7 @@ _dl_tlsdesc_resolve_rela: .align 16 _dl_tlsdesc_resolve_hold: 0: + _CET_ENDBR pushl %eax cfi_adjust_cfa_offset (4) pushl %ecx diff --git a/sysdeps/x86_64/dl-tlsdesc.S b/sysdeps/x86_64/dl-tlsdesc.S index 437bd8cde7..80d771cd88 100644 --- a/sysdeps/x86_64/dl-tlsdesc.S +++ b/sysdeps/x86_64/dl-tlsdesc.S @@ -37,6 +37,7 @@ cfi_startproc .align 16 _dl_tlsdesc_return: + _CET_ENDBR movq 8(%rax), %rax ret cfi_endproc @@ -58,6 +59,7 @@ _dl_tlsdesc_return: cfi_startproc .align 16 _dl_tlsdesc_undefweak: + _CET_ENDBR movq 8(%rax), %rax subq %fs:0, %rax ret @@ -96,6 +98,7 @@ _dl_tlsdesc_dynamic (register struct tlsdesc *tdp asm ("%rax")) cfi_startproc .align 16 _dl_tlsdesc_dynamic: + _CET_ENDBR /* Preserve call-clobbered registers that we modify. We need two scratch regs anyway. */ movq %rsi, -16(%rsp) @@ -166,6 +169,7 @@ _dl_tlsdesc_dynamic: .align 16 /* The PLT entry will have pushed the link_map pointer. */ _dl_tlsdesc_resolve_rela: + _CET_ENDBR cfi_adjust_cfa_offset (8) /* Save all call-clobbered registers. Add 8 bytes for push in the PLT entry to align the stack. */ @@ -216,6 +220,7 @@ _dl_tlsdesc_resolve_rela: .align 16 _dl_tlsdesc_resolve_hold: 0: + _CET_ENDBR /* Save all call-clobbered registers. */ subq $72, %rsp cfi_adjust_cfa_offset (72)