From patchwork Mon Jan 10 16:29:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Siddhesh Poyarekar X-Patchwork-Id: 49808 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 3F0533858C3A for ; Mon, 10 Jan 2022 16:31:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3F0533858C3A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1641832299; bh=ZuCowxG3VSJEgnJGAk8aohCF3sT+lrrm3oN1fcHnz1s=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=Y+i5w1gc/okCRPLdHl15BZ7ojdDhFmwNtPfO24UqiRpMWM5WroiCVr+zwE6Mf6dVl 2ENyYYbCS/nkdHLsfxIdFiU+pnTfbqf7XWqCxa14NusQEQ0Qz5CzqwtSOFU2YJyUeX GwBb34Y0VxPabmo8ehqu32tvVJjyRn9cysJw6PDQ= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from dormouse.elm.relay.mailchannels.net (dormouse.elm.relay.mailchannels.net [23.83.212.50]) by sourceware.org (Postfix) with ESMTPS id B93E0385841E for ; Mon, 10 Jan 2022 16:29:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B93E0385841E 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 E0C3E21376; Mon, 10 Jan 2022 16:29:32 +0000 (UTC) Received: from pdx1-sub0-mail-a304.dreamhost.com (unknown [127.0.0.6]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id E78B021533; Mon, 10 Jan 2022 16:29:31 +0000 (UTC) X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from pdx1-sub0-mail-a304.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.96.96.18 (trex/6.4.3); Mon, 10 Jan 2022 16:29:32 +0000 X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|siddhesh@gotplt.org X-MailChannels-Auth-Id: dreamhost X-Tangy-Slimy: 0201e97b43e75629_1641832172653_2161637075 X-MC-Loop-Signature: 1641832172652:3214478999 X-MC-Ingress-Time: 1641832172652 Received: from rhbox.redhat.com (unknown [1.186.121.232]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: siddhesh@gotplt.org) by pdx1-sub0-mail-a304.dreamhost.com (Postfix) with ESMTPSA id 4JXfRT5WPbz1PY; Mon, 10 Jan 2022 08:29:25 -0800 (PST) To: libc-alpha@sourceware.org Subject: [PATCH v4 1/2] debug: Autogenerate _FORTIFY_SOURCE tests Date: Mon, 10 Jan 2022 21:59:13 +0530 Message-Id: <20220110162914.222566-2-siddhesh@sourceware.org> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20220110162914.222566-1-siddhesh@sourceware.org> References: <20220105013946.2646963-1-siddhesh@sourceware.org> <20220110162914.222566-1-siddhesh@sourceware.org> MIME-Version: 1.0 X-Spam-Status: No, score=-3494.5 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_H4, RCVD_IN_MSPIKE_WL, RCVD_IN_SBL, SPF_HELO_NONE, SPF_NEUTRAL, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Rename all debug/tst-chk* tests to reflect the fortification level they're testing and any additional macros so that rules for them can be autogenerated. tst-fortify.c is the default test without fortification and is included in all auto-generated tests. This allows easier replication of the tests to check additional macros. The autogenerated tests get updated with every update to debug/Makefile. The change also expands the -lfs to include _FORTIFY_SOURCE=3. Signed-off-by: Siddhesh Poyarekar --- debug/Makefile | 109 +++++++++++++++++----------- debug/tst-chk2.c | 2 - debug/tst-chk3.c | 2 - debug/tst-chk4.cc | 1 - debug/tst-chk5.cc | 2 - debug/tst-chk6.cc | 2 - debug/tst-chk7.c | 2 - debug/tst-chk8.cc | 2 - debug/tst-fortify-c-default-1.c | 3 + debug/tst-fortify-c-default-2.c | 3 + debug/tst-fortify-c-default-3.c | 3 + debug/tst-fortify-c-lfs-1.c | 3 + debug/tst-fortify-c-lfs-2.c | 3 + debug/tst-fortify-c-lfs-3.c | 3 + debug/tst-fortify-cc-default-1.cc | 3 + debug/tst-fortify-cc-default-2.cc | 3 + debug/tst-fortify-cc-default-3.cc | 3 + debug/tst-fortify-cc-lfs-1.cc | 3 + debug/tst-fortify-cc-lfs-2.cc | 3 + debug/tst-fortify-cc-lfs-3.cc | 3 + debug/{tst-chk1.c => tst-fortify.c} | 0 debug/tst-lfschk1.c | 2 - debug/tst-lfschk2.c | 2 - debug/tst-lfschk3.c | 2 - debug/tst-lfschk4.cc | 2 - debug/tst-lfschk5.cc | 2 - debug/tst-lfschk6.cc | 2 - 27 files changed, 103 insertions(+), 67 deletions(-) delete mode 100644 debug/tst-chk2.c delete mode 100644 debug/tst-chk3.c delete mode 100644 debug/tst-chk4.cc delete mode 100644 debug/tst-chk5.cc delete mode 100644 debug/tst-chk6.cc delete mode 100644 debug/tst-chk7.c delete mode 100644 debug/tst-chk8.cc create mode 100644 debug/tst-fortify-c-default-1.c create mode 100644 debug/tst-fortify-c-default-2.c create mode 100644 debug/tst-fortify-c-default-3.c create mode 100644 debug/tst-fortify-c-lfs-1.c create mode 100644 debug/tst-fortify-c-lfs-2.c create mode 100644 debug/tst-fortify-c-lfs-3.c create mode 100644 debug/tst-fortify-cc-default-1.cc create mode 100644 debug/tst-fortify-cc-default-2.cc create mode 100644 debug/tst-fortify-cc-default-3.cc create mode 100644 debug/tst-fortify-cc-lfs-1.cc create mode 100644 debug/tst-fortify-cc-lfs-2.cc create mode 100644 debug/tst-fortify-cc-lfs-3.cc rename debug/{tst-chk1.c => tst-fortify.c} (100%) delete mode 100644 debug/tst-lfschk1.c delete mode 100644 debug/tst-lfschk2.c delete mode 100644 debug/tst-lfschk3.c delete mode 100644 debug/tst-lfschk4.cc delete mode 100644 debug/tst-lfschk5.cc delete mode 100644 debug/tst-lfschk6.cc diff --git a/debug/Makefile b/debug/Makefile index 5818d751c9..15359da99f 100644 --- a/debug/Makefile +++ b/debug/Makefile @@ -1,4 +1,5 @@ # Copyright (C) 1998-2022 Free Software Foundation, Inc. +# Copyright The GNU Toolchain Authors. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -110,32 +111,60 @@ CFLAGS-tst-longjmp_chk3.c += -fexceptions -fasynchronous-unwind-tables CPPFLAGS-tst-longjmp_chk3.c += -D_FORTIFY_SOURCE=1 CPPFLAGS-tst-realpath-chk.c += -D_FORTIFY_SOURCE=2 +# _FORTIFY_SOURCE tests. +# Auto-generate tests for _FORTIFY_SOURCE for different levels, compilers and +# preprocessor conditions based on tst-fortify.c. +# +# To add a new test condition, define a cflags-$(cond) make variable to set +# CFLAGS for the file. + +tests-all-chk = tst-fortify +tests-c-chk = +tests-cc-chk = + +CFLAGS-tst-fortify.c += -Wno-format -Wno-deprecated-declarations -Wno-error + +# No additional flags for the default tests. +define cflags-default +endef + +define cflags-lfs +CFLAGS-tst-fortify-$(1)-lfs-$(2).$(1) += -D_FILE_OFFSET_BITS=64 +endef + # We know these tests have problems with format strings, this is what # we are testing. Disable that warning. They are also testing # deprecated functions (notably gets) so disable that warning as well. # And they also generate warnings from warning attributes, which # cannot be disabled via pragmas, so require -Wno-error to be used. -CFLAGS-tst-chk1.c += -Wno-format -Wno-deprecated-declarations -Wno-error -CFLAGS-tst-chk2.c += -Wno-format -Wno-deprecated-declarations -Wno-error -CFLAGS-tst-chk3.c += -Wno-format -Wno-deprecated-declarations -Wno-error -CFLAGS-tst-chk4.cc += -Wno-format -Wno-deprecated-declarations -Wno-error -CFLAGS-tst-chk5.cc += -Wno-format -Wno-deprecated-declarations -Wno-error -CFLAGS-tst-chk6.cc += -Wno-format -Wno-deprecated-declarations -Wno-error -CFLAGS-tst-chk7.c += -Wno-format -Wno-deprecated-declarations -Wno-error -CFLAGS-tst-chk8.cc += -Wno-format -Wno-deprecated-declarations -Wno-error -CFLAGS-tst-lfschk1.c += -Wno-format -Wno-deprecated-declarations -Wno-error -CFLAGS-tst-lfschk2.c += -Wno-format -Wno-deprecated-declarations -Wno-error -CFLAGS-tst-lfschk3.c += -Wno-format -Wno-deprecated-declarations -Wno-error -CFLAGS-tst-lfschk4.cc += -Wno-format -Wno-deprecated-declarations -Wno-error -CFLAGS-tst-lfschk5.cc += -Wno-format -Wno-deprecated-declarations -Wno-error -CFLAGS-tst-lfschk6.cc += -Wno-format -Wno-deprecated-declarations -Wno-error -LDLIBS-tst-chk4 = -lstdc++ -LDLIBS-tst-chk5 = -lstdc++ -LDLIBS-tst-chk6 = -lstdc++ -LDLIBS-tst-chk8 = -lstdc++ -LDLIBS-tst-lfschk4 = -lstdc++ -LDLIBS-tst-lfschk5 = -lstdc++ -LDLIBS-tst-lfschk6 = -lstdc++ +define gen-chk-test +tests-$(1)-chk += tst-fortify-$(1)-$(2)-$(3) +CFLAGS-tst-fortify-$(1)-$(2)-$(3).$(1) += -D_FORTIFY_SOURCE=$(3) -Wno-format \ + -Wno-deprecated-declarations \ + -Wno-error +$(eval $(call cflags-$(2),$(1),$(3))) +tst-fortify-$(1)-$(2)-$(3).$(1): tst-fortify.c Makefile + ( echo "/* Autogenerated from Makefile. */"; \ + echo ""; \ + echo "#include \"tst-fortify.c\"" ) > $$@.tmp + mv $$@.tmp $$@ +endef + +chk-extensions = c cc +chk-types = default lfs +chk-levels = 1 2 3 + +$(foreach e,$(chk-extensions), \ + $(foreach t,$(chk-types), \ + $(foreach l,$(chk-levels), \ + $(eval $(call gen-chk-test,$(e),$(t),$(l)))))) + +tests-all-chk += $(tests-c-chk) $(tests-cc-chk) + +define link-cc +LDLIBS-$(1) = -lstdc++ +endef +$(foreach t,$(tests-cc-chk), $(eval $(call link-cc,$(t)))) # backtrace_symbols only works if we link with -rdynamic. backtrace # requires unwind tables on most architectures. @@ -152,19 +181,25 @@ LDFLAGS-tst-backtrace6 = -rdynamic CFLAGS-tst-ssp-1.c += -fstack-protector-all -tests = backtrace-tst tst-longjmp_chk tst-chk1 tst-chk2 tst-chk3 \ - tst-lfschk1 tst-lfschk2 tst-lfschk3 test-strcpy_chk test-stpcpy_chk \ - tst-chk4 tst-chk5 tst-chk6 tst-chk7 tst-chk8 tst-lfschk4 tst-lfschk5 \ - tst-lfschk6 tst-longjmp_chk2 tst-backtrace2 tst-backtrace3 \ - tst-backtrace4 tst-backtrace5 tst-backtrace6 tst-realpath-chk +tests = backtrace-tst \ + tst-longjmp_chk \ + test-strcpy_chk \ + test-stpcpy_chk \ + tst-longjmp_chk2 \ + tst-backtrace2 \ + tst-backtrace3 \ + tst-backtrace4 \ + tst-backtrace5 \ + tst-backtrace6 \ + tst-realpath-chk \ + $(tests-all-chk) ifeq ($(have-ssp),yes) tests += tst-ssp-1 endif ifeq (,$(CXX)) -tests-unsupported = tst-chk4 tst-chk5 tst-chk6 tst-chk8 \ - tst-lfschk4 tst-lfschk5 tst-lfschk6 +tests-unsupported = $(tests-cc-chk) endif extra-libs = libpcprofile @@ -185,20 +220,10 @@ ifeq ($(run-built-tests),yes) LOCALES := de_DE.UTF-8 include ../gen-locales.mk -$(objpfx)tst-chk1.out: $(gen-locales) -$(objpfx)tst-chk2.out: $(gen-locales) -$(objpfx)tst-chk3.out: $(gen-locales) -$(objpfx)tst-chk4.out: $(gen-locales) -$(objpfx)tst-chk5.out: $(gen-locales) -$(objpfx)tst-chk6.out: $(gen-locales) -$(objpfx)tst-chk7.out: $(gen-locales) -$(objpfx)tst-chk8.out: $(gen-locales) -$(objpfx)tst-lfschk1.out: $(gen-locales) -$(objpfx)tst-lfschk2.out: $(gen-locales) -$(objpfx)tst-lfschk3.out: $(gen-locales) -$(objpfx)tst-lfschk4.out: $(gen-locales) -$(objpfx)tst-lfschk5.out: $(gen-locales) -$(objpfx)tst-lfschk6.out: $(gen-locales) +define chk-gen-locales +$(objpfx)$(1).out: $(gen-locales) +endef +$(foreach t, $(tests-all-chk), $(eval $(call chk-gen-locales,$(t)))) endif sLIBdir := $(shell echo $(slibdir) | sed 's,lib\(\|64\)$$,\\\\$$LIB,') diff --git a/debug/tst-chk2.c b/debug/tst-chk2.c deleted file mode 100644 index be37ce2d22..0000000000 --- a/debug/tst-chk2.c +++ /dev/null @@ -1,2 +0,0 @@ -#define _FORTIFY_SOURCE 1 -#include "tst-chk1.c" diff --git a/debug/tst-chk3.c b/debug/tst-chk3.c deleted file mode 100644 index 38b8e4fb36..0000000000 --- a/debug/tst-chk3.c +++ /dev/null @@ -1,2 +0,0 @@ -#define _FORTIFY_SOURCE 2 -#include "tst-chk1.c" diff --git a/debug/tst-chk4.cc b/debug/tst-chk4.cc deleted file mode 100644 index c82e6aac86..0000000000 --- a/debug/tst-chk4.cc +++ /dev/null @@ -1 +0,0 @@ -#include "tst-chk1.c" diff --git a/debug/tst-chk5.cc b/debug/tst-chk5.cc deleted file mode 100644 index be37ce2d22..0000000000 --- a/debug/tst-chk5.cc +++ /dev/null @@ -1,2 +0,0 @@ -#define _FORTIFY_SOURCE 1 -#include "tst-chk1.c" diff --git a/debug/tst-chk6.cc b/debug/tst-chk6.cc deleted file mode 100644 index 38b8e4fb36..0000000000 --- a/debug/tst-chk6.cc +++ /dev/null @@ -1,2 +0,0 @@ -#define _FORTIFY_SOURCE 2 -#include "tst-chk1.c" diff --git a/debug/tst-chk7.c b/debug/tst-chk7.c deleted file mode 100644 index 2a7b323812..0000000000 --- a/debug/tst-chk7.c +++ /dev/null @@ -1,2 +0,0 @@ -#define _FORTIFY_SOURCE 3 -#include "tst-chk1.c" diff --git a/debug/tst-chk8.cc b/debug/tst-chk8.cc deleted file mode 100644 index 2a7b323812..0000000000 --- a/debug/tst-chk8.cc +++ /dev/null @@ -1,2 +0,0 @@ -#define _FORTIFY_SOURCE 3 -#include "tst-chk1.c" diff --git a/debug/tst-fortify-c-default-1.c b/debug/tst-fortify-c-default-1.c new file mode 100644 index 0000000000..08a5a758bb --- /dev/null +++ b/debug/tst-fortify-c-default-1.c @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ + +#include "tst-fortify.c" diff --git a/debug/tst-fortify-c-default-2.c b/debug/tst-fortify-c-default-2.c new file mode 100644 index 0000000000..08a5a758bb --- /dev/null +++ b/debug/tst-fortify-c-default-2.c @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ + +#include "tst-fortify.c" diff --git a/debug/tst-fortify-c-default-3.c b/debug/tst-fortify-c-default-3.c new file mode 100644 index 0000000000..08a5a758bb --- /dev/null +++ b/debug/tst-fortify-c-default-3.c @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ + +#include "tst-fortify.c" diff --git a/debug/tst-fortify-c-lfs-1.c b/debug/tst-fortify-c-lfs-1.c new file mode 100644 index 0000000000..08a5a758bb --- /dev/null +++ b/debug/tst-fortify-c-lfs-1.c @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ + +#include "tst-fortify.c" diff --git a/debug/tst-fortify-c-lfs-2.c b/debug/tst-fortify-c-lfs-2.c new file mode 100644 index 0000000000..08a5a758bb --- /dev/null +++ b/debug/tst-fortify-c-lfs-2.c @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ + +#include "tst-fortify.c" diff --git a/debug/tst-fortify-c-lfs-3.c b/debug/tst-fortify-c-lfs-3.c new file mode 100644 index 0000000000..08a5a758bb --- /dev/null +++ b/debug/tst-fortify-c-lfs-3.c @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ + +#include "tst-fortify.c" diff --git a/debug/tst-fortify-cc-default-1.cc b/debug/tst-fortify-cc-default-1.cc new file mode 100644 index 0000000000..08a5a758bb --- /dev/null +++ b/debug/tst-fortify-cc-default-1.cc @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ + +#include "tst-fortify.c" diff --git a/debug/tst-fortify-cc-default-2.cc b/debug/tst-fortify-cc-default-2.cc new file mode 100644 index 0000000000..08a5a758bb --- /dev/null +++ b/debug/tst-fortify-cc-default-2.cc @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ + +#include "tst-fortify.c" diff --git a/debug/tst-fortify-cc-default-3.cc b/debug/tst-fortify-cc-default-3.cc new file mode 100644 index 0000000000..08a5a758bb --- /dev/null +++ b/debug/tst-fortify-cc-default-3.cc @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ + +#include "tst-fortify.c" diff --git a/debug/tst-fortify-cc-lfs-1.cc b/debug/tst-fortify-cc-lfs-1.cc new file mode 100644 index 0000000000..08a5a758bb --- /dev/null +++ b/debug/tst-fortify-cc-lfs-1.cc @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ + +#include "tst-fortify.c" diff --git a/debug/tst-fortify-cc-lfs-2.cc b/debug/tst-fortify-cc-lfs-2.cc new file mode 100644 index 0000000000..08a5a758bb --- /dev/null +++ b/debug/tst-fortify-cc-lfs-2.cc @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ + +#include "tst-fortify.c" diff --git a/debug/tst-fortify-cc-lfs-3.cc b/debug/tst-fortify-cc-lfs-3.cc new file mode 100644 index 0000000000..08a5a758bb --- /dev/null +++ b/debug/tst-fortify-cc-lfs-3.cc @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ + +#include "tst-fortify.c" diff --git a/debug/tst-chk1.c b/debug/tst-fortify.c similarity index 100% rename from debug/tst-chk1.c rename to debug/tst-fortify.c diff --git a/debug/tst-lfschk1.c b/debug/tst-lfschk1.c deleted file mode 100644 index f3e6d47d5e..0000000000 --- a/debug/tst-lfschk1.c +++ /dev/null @@ -1,2 +0,0 @@ -#define _FILE_OFFSET_BITS 64 -#include "tst-chk1.c" diff --git a/debug/tst-lfschk2.c b/debug/tst-lfschk2.c deleted file mode 100644 index 95d4db1d32..0000000000 --- a/debug/tst-lfschk2.c +++ /dev/null @@ -1,2 +0,0 @@ -#define _FILE_OFFSET_BITS 64 -#include "tst-chk2.c" diff --git a/debug/tst-lfschk3.c b/debug/tst-lfschk3.c deleted file mode 100644 index 50a1ae1258..0000000000 --- a/debug/tst-lfschk3.c +++ /dev/null @@ -1,2 +0,0 @@ -#define _FILE_OFFSET_BITS 64 -#include "tst-chk3.c" diff --git a/debug/tst-lfschk4.cc b/debug/tst-lfschk4.cc deleted file mode 100644 index f3e6d47d5e..0000000000 --- a/debug/tst-lfschk4.cc +++ /dev/null @@ -1,2 +0,0 @@ -#define _FILE_OFFSET_BITS 64 -#include "tst-chk1.c" diff --git a/debug/tst-lfschk5.cc b/debug/tst-lfschk5.cc deleted file mode 100644 index 95d4db1d32..0000000000 --- a/debug/tst-lfschk5.cc +++ /dev/null @@ -1,2 +0,0 @@ -#define _FILE_OFFSET_BITS 64 -#include "tst-chk2.c" diff --git a/debug/tst-lfschk6.cc b/debug/tst-lfschk6.cc deleted file mode 100644 index 50a1ae1258..0000000000 --- a/debug/tst-lfschk6.cc +++ /dev/null @@ -1,2 +0,0 @@ -#define _FILE_OFFSET_BITS 64 -#include "tst-chk3.c" From patchwork Mon Jan 10 16:29:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Siddhesh Poyarekar X-Patchwork-Id: 49807 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 D14B83858408 for ; Mon, 10 Jan 2022 16:30:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D14B83858408 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1641832255; bh=idy57WsmHonrFxojdLAJKQGbPK9ZPhCNU1hQGdkPbb4=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=VBcMIikzqx3knPsvtTQHTADcjc/Heb/htIQytUQFbe9evi1dhW6Lxxm+864sOdlzk qATByg2zGL4uC1TNp8fCnEUYzXjTbn/wUomClcgOhH7/d7WJ4AKjIZAk26JW+T4n3f vXX7SSRg8nvaHME+CyR6tUbHDPP8MK5wtmjYEePQ= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from dormouse.elm.relay.mailchannels.net (dormouse.elm.relay.mailchannels.net [23.83.212.50]) by sourceware.org (Postfix) with ESMTPS id 35793385840A for ; Mon, 10 Jan 2022 16:29:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 35793385840A 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 8C8A04C0CDF; Mon, 10 Jan 2022 16:29:30 +0000 (UTC) Received: from pdx1-sub0-mail-a304.dreamhost.com (unknown [127.0.0.6]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 149F54C0DB2; Mon, 10 Jan 2022 16:29:30 +0000 (UTC) X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from pdx1-sub0-mail-a304.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.107.255.145 (trex/6.4.3); Mon, 10 Jan 2022 16:29:30 +0000 X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|siddhesh@gotplt.org X-MailChannels-Auth-Id: dreamhost X-Wipe-Zesty: 1aa403376f9fdb60_1641832170486_2368559482 X-MC-Loop-Signature: 1641832170486:2420247166 X-MC-Ingress-Time: 1641832170486 Received: from rhbox.redhat.com (unknown [1.186.121.232]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: siddhesh@gotplt.org) by pdx1-sub0-mail-a304.dreamhost.com (Postfix) with ESMTPSA id 4JXfRX0mjxz1Pb; Mon, 10 Jan 2022 08:29:27 -0800 (PST) To: libc-alpha@sourceware.org Subject: [PATCH v4 2/2] debug: Synchronize feature guards in fortified functions [BZ #28746] Date: Mon, 10 Jan 2022 21:59:14 +0530 Message-Id: <20220110162914.222566-3-siddhesh@sourceware.org> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20220110162914.222566-1-siddhesh@sourceware.org> References: <20220105013946.2646963-1-siddhesh@sourceware.org> <20220110162914.222566-1-siddhesh@sourceware.org> MIME-Version: 1.0 X-Spam-Status: No, score=-3494.5 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_H4, RCVD_IN_MSPIKE_WL, RCVD_IN_SBL, SPF_HELO_NONE, SPF_NEUTRAL, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Some functions (e.g. stpcpy, pread64, etc.) had moved to POSIX in the main headers as they got incorporated into the standard, but their fortified variants remained under __USE_GNU. As a result, these functions did not get fortified when _GNU_SOURCE was not defined. Add test wrappers that check all functions tested in tst-chk0 at all levels with _GNU_SOURCE undefined and then use the failures to (1) exclude checks for _GNU_SOURCE functions in these tests and (2) Fix feature macro guards in the fortified function headers so that they're the same as the ones in the main headers. This fixes BZ #28746. Signed-off-by: Siddhesh Poyarekar --- debug/Makefile | 10 +++++-- debug/tst-fortify-c-nongnu-1.c | 3 ++ debug/tst-fortify-c-nongnu-2.c | 3 ++ debug/tst-fortify-c-nongnu-3.c | 3 ++ debug/tst-fortify-cc-nongnu-1.cc | 3 ++ debug/tst-fortify-cc-nongnu-2.cc | 3 ++ debug/tst-fortify-cc-nongnu-3.cc | 3 ++ debug/tst-fortify.c | 49 ++++++++++++++++++++++++++------ posix/bits/unistd.h | 2 +- string/bits/string_fortified.h | 8 ++++-- support/xsignal.h | 2 ++ wcsmbs/bits/wchar2.h | 2 +- 12 files changed, 76 insertions(+), 15 deletions(-) create mode 100644 debug/tst-fortify-c-nongnu-1.c create mode 100644 debug/tst-fortify-c-nongnu-2.c create mode 100644 debug/tst-fortify-c-nongnu-3.c create mode 100644 debug/tst-fortify-cc-nongnu-1.cc create mode 100644 debug/tst-fortify-cc-nongnu-2.cc create mode 100644 debug/tst-fortify-cc-nongnu-3.cc diff --git a/debug/Makefile b/debug/Makefile index 15359da99f..b5e13eec94 100644 --- a/debug/Makefile +++ b/debug/Makefile @@ -132,6 +132,12 @@ define cflags-lfs CFLAGS-tst-fortify-$(1)-lfs-$(2).$(1) += -D_FILE_OFFSET_BITS=64 endef +define cflags-nongnu +CFLAGS-tst-fortify-$(1)-nongnu-$(2).$(1) += -D_LARGEFILE64_SOURCE=1 +endef + +src-chk-nongnu = \#undef _GNU_SOURCE + # We know these tests have problems with format strings, this is what # we are testing. Disable that warning. They are also testing # deprecated functions (notably gets) so disable that warning as well. @@ -145,13 +151,13 @@ CFLAGS-tst-fortify-$(1)-$(2)-$(3).$(1) += -D_FORTIFY_SOURCE=$(3) -Wno-format \ $(eval $(call cflags-$(2),$(1),$(3))) tst-fortify-$(1)-$(2)-$(3).$(1): tst-fortify.c Makefile ( echo "/* Autogenerated from Makefile. */"; \ - echo ""; \ + echo "$(src-chk-$(2))"; \ echo "#include \"tst-fortify.c\"" ) > $$@.tmp mv $$@.tmp $$@ endef chk-extensions = c cc -chk-types = default lfs +chk-types = default lfs nongnu chk-levels = 1 2 3 $(foreach e,$(chk-extensions), \ diff --git a/debug/tst-fortify-c-nongnu-1.c b/debug/tst-fortify-c-nongnu-1.c new file mode 100644 index 0000000000..5266984fa3 --- /dev/null +++ b/debug/tst-fortify-c-nongnu-1.c @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ +#undef _GNU_SOURCE +#include "tst-fortify.c" diff --git a/debug/tst-fortify-c-nongnu-2.c b/debug/tst-fortify-c-nongnu-2.c new file mode 100644 index 0000000000..5266984fa3 --- /dev/null +++ b/debug/tst-fortify-c-nongnu-2.c @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ +#undef _GNU_SOURCE +#include "tst-fortify.c" diff --git a/debug/tst-fortify-c-nongnu-3.c b/debug/tst-fortify-c-nongnu-3.c new file mode 100644 index 0000000000..5266984fa3 --- /dev/null +++ b/debug/tst-fortify-c-nongnu-3.c @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ +#undef _GNU_SOURCE +#include "tst-fortify.c" diff --git a/debug/tst-fortify-cc-nongnu-1.cc b/debug/tst-fortify-cc-nongnu-1.cc new file mode 100644 index 0000000000..5266984fa3 --- /dev/null +++ b/debug/tst-fortify-cc-nongnu-1.cc @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ +#undef _GNU_SOURCE +#include "tst-fortify.c" diff --git a/debug/tst-fortify-cc-nongnu-2.cc b/debug/tst-fortify-cc-nongnu-2.cc new file mode 100644 index 0000000000..5266984fa3 --- /dev/null +++ b/debug/tst-fortify-cc-nongnu-2.cc @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ +#undef _GNU_SOURCE +#include "tst-fortify.c" diff --git a/debug/tst-fortify-cc-nongnu-3.cc b/debug/tst-fortify-cc-nongnu-3.cc new file mode 100644 index 0000000000..5266984fa3 --- /dev/null +++ b/debug/tst-fortify-cc-nongnu-3.cc @@ -0,0 +1,3 @@ +/* Autogenerated from Makefile. */ +#undef _GNU_SOURCE +#include "tst-fortify.c" diff --git a/debug/tst-fortify.c b/debug/tst-fortify.c index 9288610fe6..d65a2fe6e1 100644 --- a/debug/tst-fortify.c +++ b/debug/tst-fortify.c @@ -1,4 +1,5 @@ /* Copyright (C) 2004-2022 Free Software Foundation, Inc. + Copyright The GNU Toolchain Authors. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -36,6 +37,17 @@ #include #include +#ifndef _GNU_SOURCE +# define MEMPCPY memcpy +# define WMEMPCPY wmemcpy +# define MEMPCPY_RET(x) 0 +# define WMEMPCPY_RET(x) 0 +#else +# define MEMPCPY mempcpy +# define WMEMPCPY wmempcpy +# define MEMPCPY_RET(x) __builtin_strlen (x) +# define WMEMPCPY_RET(x) wcslen (x) +#endif #define obstack_chunk_alloc malloc #define obstack_chunk_free free @@ -162,7 +174,7 @@ do_test (void) if (memcmp (buf, "aabcdefghi", 10)) FAIL (); - if (mempcpy (buf + 5, "abcde", 5) != buf + 10 + if (MEMPCPY (buf + 5, "abcde", 5) != buf + 5 + MEMPCPY_RET ("abcde") || memcmp (buf, "aabcdabcde", 10)) FAIL (); @@ -207,7 +219,7 @@ do_test (void) if (memcmp (buf, "aabcdefghi", 10)) FAIL (); - if (mempcpy (buf + 5, "abcde", l0 + 5) != buf + 10 + if (MEMPCPY (buf + 5, "abcde", l0 + 5) != buf + 5 + MEMPCPY_RET ("abcde") || memcmp (buf, "aabcdabcde", 10)) FAIL (); @@ -266,7 +278,8 @@ do_test (void) if (memcmp (a.buf1, "aabcdefghi", 10)) FAIL (); - if (mempcpy (a.buf1 + 5, "abcde", l0 + 5) != a.buf1 + 10 + if (MEMPCPY (a.buf1 + 5, "abcde", l0 + 5) + != a.buf1 + 5 + MEMPCPY_RET ("abcde") || memcmp (a.buf1, "aabcdabcde", 10)) FAIL (); @@ -347,6 +360,7 @@ do_test (void) bcopy (buf + 1, buf + 2, l0 + 9); CHK_FAIL_END +#ifdef _GNU_SOURCE CHK_FAIL_START p = (char *) mempcpy (buf + 6, "abcde", 5); CHK_FAIL_END @@ -354,6 +368,7 @@ do_test (void) CHK_FAIL_START p = (char *) mempcpy (buf + 6, "abcde", l0 + 5); CHK_FAIL_END +#endif CHK_FAIL_START memset (buf + 9, 'j', 2); @@ -464,6 +479,7 @@ do_test (void) bcopy (a.buf1 + 1, a.buf1 + 2, l0 + 9); CHK_FAIL_END +#ifdef _GNU_SOURCE CHK_FAIL_START p = (char *) mempcpy (a.buf1 + 6, "abcde", 5); CHK_FAIL_END @@ -471,6 +487,7 @@ do_test (void) CHK_FAIL_START p = (char *) mempcpy (a.buf1 + 6, "abcde", l0 + 5); CHK_FAIL_END +#endif CHK_FAIL_START memset (a.buf1 + 9, 'j', 2); @@ -550,7 +567,7 @@ do_test (void) if (wmemcmp (wbuf, L"aabcdefghi", 10)) FAIL (); - if (wmempcpy (wbuf + 5, L"abcde", 5) != wbuf + 10 + if (WMEMPCPY (wbuf + 5, L"abcde", 5) != wbuf + 5 + WMEMPCPY_RET (L"abcde") || wmemcmp (wbuf, L"aabcdabcde", 10)) FAIL (); @@ -583,7 +600,8 @@ do_test (void) if (wmemcmp (wbuf, L"aabcdefghi", 10)) FAIL (); - if (wmempcpy (wbuf + 5, L"abcde", l0 + 5) != wbuf + 10 + if (WMEMPCPY (wbuf + 5, L"abcde", l0 + 5) + != wbuf + 5 + WMEMPCPY_RET (L"abcde") || wmemcmp (wbuf, L"aabcdabcde", 10)) FAIL (); @@ -625,7 +643,8 @@ do_test (void) if (wmemcmp (wa.buf1, L"aabcdefghi", 10)) FAIL (); - if (wmempcpy (wa.buf1 + 5, L"abcde", l0 + 5) != wa.buf1 + 10 + if (WMEMPCPY (wa.buf1 + 5, L"abcde", l0 + 5) + != wa.buf1 + 5 + WMEMPCPY_RET (L"abcde") || wmemcmp (wa.buf1, L"aabcdabcde", 10)) FAIL (); @@ -694,6 +713,7 @@ do_test (void) wmemmove (wbuf + 2, wbuf + 1, l0 + 9); CHK_FAIL_END +#ifdef _GNU_SOURCE CHK_FAIL_START wp = wmempcpy (wbuf + 6, L"abcde", 5); CHK_FAIL_END @@ -701,6 +721,7 @@ do_test (void) CHK_FAIL_START wp = wmempcpy (wbuf + 6, L"abcde", l0 + 5); CHK_FAIL_END +#endif CHK_FAIL_START wmemset (wbuf + 9, L'j', 2); @@ -768,6 +789,7 @@ do_test (void) wmemmove (wa.buf1 + 2, wa.buf1 + 1, l0 + 9); CHK_FAIL_END +#ifdef _GNU_SOURCE CHK_FAIL_START wp = wmempcpy (wa.buf1 + 6, L"abcde", 5); CHK_FAIL_END @@ -775,6 +797,7 @@ do_test (void) CHK_FAIL_START wp = wmempcpy (wa.buf1 + 6, L"abcde", l0 + 5); CHK_FAIL_END +#endif CHK_FAIL_START wmemset (wa.buf1 + 9, L'j', 2); @@ -906,6 +929,7 @@ do_test (void) if (fprintf (fp, buf2 + 4, str5) != 7) FAIL (); +#ifdef _GNU_SOURCE char *my_ptr = NULL; strcpy (buf2 + 2, "%n%s%n"); /* When the format string is writable and contains %n, @@ -935,6 +959,7 @@ do_test (void) if (obstack_printf (&obs, "%s%n%s%n", str4, &n1, str5, &n1) != 14) FAIL (); obstack_free (&obs, NULL); +#endif if (freopen (temp_filename, "r", stdin) == NULL) { @@ -982,6 +1007,7 @@ do_test (void) rewind (stdin); +#ifdef _GNU_SOURCE if (fgets_unlocked (buf, buf_size, stdin) != buf || memcmp (buf, "abcdefgh\n", 10)) FAIL (); @@ -1008,6 +1034,7 @@ do_test (void) #endif rewind (stdin); +#endif if (fread (buf, 1, buf_size, stdin) != buf_size || memcmp (buf, "abcdefgh\nA", 10)) @@ -1578,7 +1605,10 @@ do_test (void) ret = 1; } - int fd = posix_openpt (O_RDWR); + int fd; + +#ifdef _GNU_SOURCE + fd = posix_openpt (O_RDWR); if (fd != -1) { char enough[1000]; @@ -1594,6 +1624,7 @@ do_test (void) #endif close (fd); } +#endif #if PATH_MAX > 0 confstr (_CS_GNU_LIBC_VERSION, largebuf, sizeof (largebuf)); @@ -1711,8 +1742,9 @@ do_test (void) poll (fds, l0 + 2, 0); CHK_FAIL_END #endif +#ifdef _GNU_SOURCE ppoll (fds, 1, NULL, NULL); -#if __USE_FORTIFY_LEVEL >= 1 +# if __USE_FORTIFY_LEVEL >= 1 CHK_FAIL_START ppoll (fds, 2, NULL, NULL); CHK_FAIL_END @@ -1720,6 +1752,7 @@ do_test (void) CHK_FAIL_START ppoll (fds, l0 + 2, NULL, NULL); CHK_FAIL_END +# endif #endif return ret; diff --git a/posix/bits/unistd.h b/posix/bits/unistd.h index 01df84b5f9..f53a7a06eb 100644 --- a/posix/bits/unistd.h +++ b/posix/bits/unistd.h @@ -40,7 +40,7 @@ read (int __fd, void *__buf, size_t __nbytes) __fd, __buf, __nbytes); } -#ifdef __USE_UNIX98 +#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 extern ssize_t __pread_chk (int __fd, void *__buf, size_t __nbytes, __off_t __offset, size_t __bufsize) __wur __attr_access ((__write_only__, 2, 3)); diff --git a/string/bits/string_fortified.h b/string/bits/string_fortified.h index 51ad480401..f4a5dfc2e5 100644 --- a/string/bits/string_fortified.h +++ b/string/bits/string_fortified.h @@ -79,7 +79,7 @@ __NTH (strcpy (char *__restrict __dest, const char *__restrict __src)) return __builtin___strcpy_chk (__dest, __src, __glibc_objsize (__dest)); } -#ifdef __USE_GNU +#ifdef __USE_XOPEN2K8 __fortify_function char * __NTH (stpcpy (char *__restrict __dest, const char *__restrict __src)) { @@ -96,14 +96,15 @@ __NTH (strncpy (char *__restrict __dest, const char *__restrict __src, __glibc_objsize (__dest)); } -#if __GNUC_PREREQ (4, 7) || __glibc_clang_prereq (2, 6) +#ifdef __USE_XOPEN2K8 +# 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, __glibc_objsize (__dest)); } -#else +# else extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n, size_t __destlen) __THROW __fortified_attr_access ((__write_only__, 1, 3)) @@ -119,6 +120,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 #endif diff --git a/support/xsignal.h b/support/xsignal.h index 973f532495..d868bb336c 100644 --- a/support/xsignal.h +++ b/support/xsignal.h @@ -28,7 +28,9 @@ __BEGIN_DECLS terminate the process on error. */ void xraise (int sig); +#ifdef _GNU_SOURCE sighandler_t xsignal (int sig, sighandler_t handler); +#endif void xsigaction (int sig, const struct sigaction *newact, struct sigaction *oldact); diff --git a/wcsmbs/bits/wchar2.h b/wcsmbs/bits/wchar2.h index 25d06d433f..0e017f458b 100644 --- a/wcsmbs/bits/wchar2.h +++ b/wcsmbs/bits/wchar2.h @@ -457,7 +457,7 @@ __NTH (wcsrtombs (char *__restrict __dst, const wchar_t **__restrict __src, } -#ifdef __USE_GNU +#ifdef __USE_XOPEN2K8 extern size_t __mbsnrtowcs_chk (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps,