From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qt1-x844.google.com (mail-qt1-x844.google.com [IPv6:2607:f8b0:4864:20::844]) by sourceware.org (Postfix) with ESMTPS id E7A37385B834 for ; Tue, 24 Mar 2020 11:54:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org E7A37385B834 Received: by mail-qt1-x844.google.com with SMTP id t9so10670469qto.9 for ; Tue, 24 Mar 2020 04:54:53 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=xidyvCuLRXVWvFi8R3YwR8Zb6G8QWc/NMYtE0RbDqGc=; b=iT0fNnztamqdc9aI8gg2oGmgs2rx+WPLTJlhBfp+7+17DTJWDbUMopN0Fqfzt9JbEr mq0G9YL1DH4BhbJTEJPxZSCJROX0TuBzKJHnhnEpLtlRPz7oJjB1juKHU5UHV6HnkHE7 CaRqlUT8jTMPEV640UVYdDNrmu0JwR7Ies00cJdsXn/fnXex9L/U+LI9W2pNhyE0A7TN /XCpm8n+z65u79IZ4/FjJenuZlXdzGlNmfMOLmu+K+e10hxDnTRf4DL0HHN1k0i3Vu82 twM6Qn+sxzFNDuHpm12W6nMwCe+YOOTMFuYPj2faJK/RDB0lHFtAuZFqBmce5Cbo1cz2 JQJw== X-Gm-Message-State: ANhLgQ1ezPd8fgbGkN/ebpRxIdkL0BdymPappYpx2FqPlxROMaoXxd6A hsO1hSS9jVYRXXk9VxkV0r2OrYyTE5U= X-Google-Smtp-Source: ADFU+vvSbaCiKU1m3MiNDXWxSbTXa02Bch/37bdJR0chDULEbcgsTdQwAs2/JAD58DCF55RMUZYHLA== X-Received: by 2002:aed:2499:: with SMTP id t25mr26645715qtc.127.1585050893046; Tue, 24 Mar 2020 04:54:53 -0700 (PDT) Received: from localhost.localdomain ([177.194.48.209]) by smtp.googlemail.com with ESMTPSA id o81sm13302910qke.24.2020.03.24.04.54.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Mar 2020 04:54:52 -0700 (PDT) From: Adhemerval Zanella To: libc-stable@sourceware.org Subject: [COMMITTED] i386: Use comdat instead of .gnu.linkonce for i386 setup pic register (BZ #20543) Date: Tue, 24 Mar 2020 08:52:47 -0300 Message-Id: <20200324115250.688467-1-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.17.1 X-Spam-Status: No, score=-27.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, 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-stable@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-stable mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Mar 2020 11:54:55 -0000 GCC has moved from using .gnu.linkonce for i386 setup pic register with minimum current version (as for binutils minimum binutils that support comdat). Trying to pinpoint when binutils has added comdat support for i686, it seems it was around 2004 [1]. I also checking with some ancient binutils older than 2.16 I see: test.o: In function `__x86.get_pc_thunk.bx': test.o(.text.__x86.get_pc_thunk.bx+0x0): multiple definition of `__x86.get_pc_thunk.bx' /usr/lib/gcc/x86_64-linux-gnu/5/../../../i386-linux-gnu/crti.o(.gnu.linkonce.t.__x86.get_pc_thunk.bx+0x0): first defined here Which seems that such version can not handle either comdat at all or a mix of linkonce and comdat. For binutils 2.16.1 I am getting a different issue trying to link a binary with and more recent ctri.o (unrecognized relocation (0x2b) in section `.init', which is R_386_GOT32X and old binutils won't generate it anyway). So I think that either unlikely someone will use an older binutils than the one used to glibc and even this scenario may fail with some issue as the R_386_GOT32X. Also, 2.16.1 is quite old and not really supported (glibc itself required 2.25). Checked on i686-linux-gnu. [1] https://gcc.gnu.org/ml/gcc/2004-05/msg00030.html (cherry picked from commit 35200fd3892f6caf867bf89bc8048e553906af28) --- NEWS | 1 + sysdeps/i386/sysdep.h | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index d966688a56..76cfbcaa16 100644 --- a/NEWS +++ b/NEWS @@ -24,6 +24,7 @@ CVE-2020-1752: A use-after-free vulnerability in the glob function when The following bugs are resolved with this release: + [20543] Please move from .gnu.linkonce to comdat [23518] login: Remove utmp backend jump tables [24682] localedata: zh_CN first weekday should be Monday per GB/T 7408-2005 diff --git a/sysdeps/i386/sysdep.h b/sysdeps/i386/sysdep.h index 749b55b077..eee6d586c1 100644 --- a/sysdeps/i386/sysdep.h +++ b/sysdeps/i386/sysdep.h @@ -61,7 +61,7 @@ lose: SYSCALL_PIC_SETUP \ # define SETUP_PIC_REG(reg) \ .ifndef GET_PC_THUNK(reg); \ - .section .gnu.linkonce.t.GET_PC_THUNK(reg),"ax",@progbits; \ + .section .text.GET_PC_THUNK(reg),"axG",@progbits,GET_PC_THUNK(reg),comdat; \ .globl GET_PC_THUNK(reg); \ .hidden GET_PC_THUNK(reg); \ .p2align 4; \ @@ -97,7 +97,8 @@ GET_PC_THUNK(reg): \ # define SETUP_PIC_REG_STR(reg) \ ".ifndef " GET_PC_THUNK_STR (reg) "\n" \ - ".section .gnu.linkonce.t." GET_PC_THUNK_STR (reg) ",\"ax\",@progbits\n" \ + ".section .text." GET_PC_THUNK_STR (reg) ",\"axG\",@progbits," \ + GET_PC_THUNK_STR (reg) ",comdat\n" \ ".globl " GET_PC_THUNK_STR (reg) "\n" \ ".hidden " GET_PC_THUNK_STR (reg) "\n" \ ".p2align 4\n" \ -- 2.17.1