public inbox for glibc-cvs@sourceware.org
help / color / mirror / Atom feed
From: Adhemerval Zanella <azanella@sourceware.org>
To: glibc-cvs@sourceware.org
Subject: [glibc] csu: Disable stack protector for static-reloc for static-pie
Date: Thu,  6 Oct 2022 17:40:20 +0000 (GMT)	[thread overview]
Message-ID: <20221006174020.7C0893856DC2@sourceware.org> (raw)

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=e82aab227bdf3faa0f28a69dbf50b5562659d1cf

commit e82aab227bdf3faa0f28a69dbf50b5562659d1cf
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Wed Oct 5 14:07:28 2022 -0300

    csu: Disable stack protector for static-reloc for static-pie
    
    For instance on x86_64 with gcc 12.1.1 andwith fstack-protector
    enabled the empty function still generates a stack protector code
    sequence:
    
      0000000000000000 <_dl_relocate_static_pie>:
         0:   48 83 ec 18             sub    $0x18,%rsp
         4:   64 48 8b 04 25 28 00    mov    %fs:0x28,%rax
         b:   00 00
         d:   48 89 44 24 08          mov    %rax,0x8(%rsp)
        12:   31 c0                   xor    %eax,%eax
        14:   48 8b 44 24 08          mov    0x8(%rsp),%rax
        19:   64 48 2b 04 25 28 00    sub    %fs:0x28,%rax
        20:   00 00
        22:   75 05                   jne    29 <_dl_relocate_static_pie+0x29>
        24:   48 83 c4 18             add    $0x18,%rsp
        28:   c3                      ret
        29:   e8 00 00 00 00          call   2e <_dl_relocate_static_pie+0x2e>
    
    And since the function is called prior thread pointer setup, it
    triggers a invalid memory access (this is shown with the failure
    of elf/tst-tls1-static-non-pie).
    
    Although it might characterizes as compiler issue or missed
    optimization, to be safe also disables stack protector on
    static-reloc object.
    
    Checked on x86_64-linux-gnu and sparc64-linux-gnu.
    Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>

Diff:
---
 csu/Makefile | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/csu/Makefile b/csu/Makefile
index 2e8a28e851..f71a5eb6c6 100644
--- a/csu/Makefile
+++ b/csu/Makefile
@@ -50,15 +50,21 @@ tests =
 # applications, so that build flags matter.
 # See <https://sourceware.org/ml/libc-alpha/2018-07/msg00101.html>.
 #
+# The function is called prior the thread pointer setup, and if stack
+# protector is enabled the compiler might still generate the stack check
+# (which requires the thread pointer correctly set).
+extra-no-ssp = static-reloc
+
 # libc-start.os is safe to be built with stack protector since
 # __libc_start_main is called after stack canary setup is done.
-ssp-safe.os = static-reloc libc-start
+ssp-safe.os = libc-start
 
-CFLAGS-.o += $(call elide-stack-protector,.o,$(routines))
-CFLAGS-.op += $(call elide-stack-protector,.op,$(routines))
-CFLAGS-.oS += $(call elide-stack-protector,.oS,$(routines))
+CFLAGS-.o += $(call elide-stack-protector,.o,$(routines) $(extra-no-ssp))
+CFLAGS-.op += $(call elide-stack-protector,.op,$(routines) $(extra-no-ssp))
+CFLAGS-.oS += $(call elide-stack-protector,.oS,$(routines) $(extra-no-ssp))
 CFLAGS-.os += $(call elide-stack-protector,.os,$(filter-out \
-						 $(ssp-safe.os),$(routines)))
+						 $(ssp-safe.os), \
+						 $(routines) $(extra-no-ssp)))
 
 ifeq (yes,$(build-shared))
 extra-objs += S$(start-installed-name) gmon-start.os

                 reply	other threads:[~2022-10-06 17:40 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221006174020.7C0893856DC2@sourceware.org \
    --to=azanella@sourceware.org \
    --cc=glibc-cvs@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).