From patchwork Thu Nov 12 07:59:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Siddhesh Poyarekar X-Patchwork-Id: 41026 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 3A9F239F6E40; Thu, 12 Nov 2020 07:59:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3A9F239F6E40 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1605167969; bh=bfiD2sGZ7mP5MEtNj0Ki1Sj+kuA9rcJssWkGF1+Y3SY=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=hkqBXA58rXw6oL/bSbtLaZtl4+uYwst0+GSxz7P/M4jyAcOqERLK8Bm8VmOnOk7PZ KsWx1LNfLqhXJ8Dlz1Q6z+U5Px8vx6f21T/ykC6hHGPBveUATH7ZO3sI93/CO1paFs XHDOFKu/4jb6mykBBqewFU0z57afDR7j5Lcb961I= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from quail.birch.relay.mailchannels.net (quail.birch.relay.mailchannels.net [23.83.209.151]) by sourceware.org (Postfix) with ESMTPS id 0FA8839DD41A for ; Thu, 12 Nov 2020 07:59:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 0FA8839DD41A X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id BE9B420B9F for ; Thu, 12 Nov 2020 07:59:24 +0000 (UTC) Received: from pdx1-sub0-mail-a27.g.dreamhost.com (100-96-12-107.trex.outbound.svc.cluster.local [100.96.12.107]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 50F8321530 for ; Thu, 12 Nov 2020 07:59:24 +0000 (UTC) X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from pdx1-sub0-mail-a27.g.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384) by 0.0.0.0:2500 (trex/5.18.10); Thu, 12 Nov 2020 07:59:24 +0000 X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|siddhesh@gotplt.org X-MailChannels-Auth-Id: dreamhost X-Hook-Shelf: 739a2abc77d72bb1_1605167964544_2197790119 X-MC-Loop-Signature: 1605167964544:2560951608 X-MC-Ingress-Time: 1605167964543 Received: from pdx1-sub0-mail-a27.g.dreamhost.com (localhost [127.0.0.1]) by pdx1-sub0-mail-a27.g.dreamhost.com (Postfix) with ESMTP id 1CFF988216 for ; Wed, 11 Nov 2020 23:59:24 -0800 (PST) Received: from rhbox.redhat.com (unknown [1.186.101.110]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: siddhesh@gotplt.org) by pdx1-sub0-mail-a27.g.dreamhost.com (Postfix) with ESMTPSA id 163FB7F696 for ; Wed, 11 Nov 2020 23:59:22 -0800 (PST) X-DH-BACKEND: pdx1-sub0-mail-a27 To: libc-alpha@sourceware.org Subject: [PATCH] Use __builtin___stpncpy_chk when available Date: Thu, 12 Nov 2020 13:29:15 +0530 Message-Id: <20201112075915.2172453-1-siddhesh@sourceware.org> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 X-Spam-Status: No, score=-9.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_DMARC_NONE, KAM_DMARC_STATUS, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NEUTRAL, 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: Siddhesh Poyarekar via Libc-alpha From: Siddhesh Poyarekar Reply-To: Siddhesh Poyarekar Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" The builtin has been available in gcc since 4.7.0 and in clang since 2.6. This fixes stpncpy fortification with clang since it does a better job of plugging in __stpncpy_chk in the right place than the header hackery. This has been tested by building and running all tests with gcc 10.2.1 and also with clang tip as of a few days ago (just the tests in debug/ since running all tests don't work with clang at the moment) to make sure that both compilers pass the stpncpy tests. --- string/bits/string_fortified.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/string/bits/string_fortified.h b/string/bits/string_fortified.h index c8d3051af8..4c1aeb45f1 100644 --- a/string/bits/string_fortified.h +++ b/string/bits/string_fortified.h @@ -91,7 +91,13 @@ __NTH (strncpy (char *__restrict __dest, const char *__restrict __src, return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest)); } -/* XXX We have no corresponding builtin yet. */ +#if __GNUC_PREREQ (4, 7) || __glibc_clang_prereq (2, 6) +__fortify_function char * +__NTH (stpncpy (char *__dest, const char *__src, size_t __n)) +{ + return __builtin___stpncpy_chk (__dest, __src, __n, __bos (__dest)); +} +#else extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n, size_t __destlen) __THROW __attr_access ((__write_only__, 1, 3)) __attr_access ((__read_only__, 2)); @@ -106,6 +112,7 @@ __NTH (stpncpy (char *__dest, const char *__src, size_t __n)) return __stpncpy_chk (__dest, __src, __n, __bos (__dest)); return __stpncpy_alias (__dest, __src, __n); } +#endif __fortify_function char *