From patchwork Mon Oct 2 15:53:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Volker_Wei=C3=9Fmann?= X-Patchwork-Id: 76975 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 228873856243 for ; Mon, 2 Oct 2023 15:54:10 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) by sourceware.org (Postfix) with ESMTPS id 483533858C5E for ; Mon, 2 Oct 2023 15:53:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 483533858C5E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1696262035; x=1696866835; i=volker.weissmann@gmx.de; bh=QDQNHeKF4h8JdJ7+jXU4s5srZZFP1bh/YowvdqDCGKE=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date; b=XkosMqhXg7+mGuOOCbE+3E0r/LDeSJXJ1Y5e/QRxV5DGgSMGYypN1tkzoACWWA5SYCmABF3qvZc ehBVpHb1f5tzafXfNG2TdYspvkfQ8yBeO7+z8T7Ue21YWwgV0xbXCYf27B/69F0ugl4tZg7iYJk+W 3edWnVw4kaa/CVBLb3qOb/60Wkf9Y6IxdIWhg4j/upckkrpvGLBe/RyRzjc2zlecQerPDIVqrF2Kt tK2wS4PbwHgU4GuA4mT2S+1QRWTuQCtXtcyS9kOwmBxLhtMP7IekL5wY/MtC+GKXIKz/qLzU70WBH e8JCDdP08L3QxYKwQiCXvoKh0KjlGGQa7Lew== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from battle.fritz.box ([46.5.230.254]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MhlGq-1rI1Dv34dc-00dqTe; Mon, 02 Oct 2023 17:53:55 +0200 From: =?utf-8?q?Volker_Wei=C3=9Fmann?= To: libc-alpha@sourceware.org Cc: =?utf-8?q?Volker_Wei=C3=9Fmann?= Subject: [PATCH] Fix FORTIFY_SOURCE false positive Date: Mon, 2 Oct 2023 17:53:39 +0200 Message-ID: <20231002155339.2571514-1-volker.weissmann@gmx.de> X-Mailer: git-send-email 2.42.0 MIME-Version: 1.0 X-Provags-ID: V03:K1:WO8hKc9w6h8s0s2t6Sqk1uS0z9OJOtGl0DO622fr3ep47y+x2w8 0JFUP5/+uO3HGry1kO/r0/ba9oIlsiSnMc6h1J3aNjOz8LRopeUhy0aM/oX1JKyf306i7Jy lactlKtIBJeo2e20uS56gDGlOCpJj7IYEJjghDZnsdZr3epYw9W1zwHBHEsBRtc3DASGgDC t4ej9XzWoBhepoM1FxStQ== UI-OutboundReport: notjunk:1;M01:P0:d7p02CNwtsI=;IRa813Ba20n2JRiEN012y5Ew3sK 9gNRA6fzKNAuwN6QVGP5sHP+pz5fIFvKOARvpiFUUC75ClAbXE7MyeKd4dvcmoJJGgOZw0W57 41TqsFVQd63WMUUHNYY0BvHRwDqgGW/Imw+eSFn57WNtrqVHBn5zeCuQajFSm5Zqe4xrBDvUZ 6+KTByL6/nwLyDZTG6Z1rnCJxIzqJORkvnw0K2npAs1Am2E01Zfobf6BdsqOoukZtIiQQ8fIy R+EqL3S041rXtFAI8SXC9uflPGLPr1qy2zUoEaj7b4JBnJB+n7cMZAYOA8MCWPw6DTDzIN3RE RNVaI2f+WbrJzHPqSFDe1odecz6l2ToV7tB5fGpoaWYUt5lgNOfLkL56p1DZ33cI+kZXtBaeN caUaGw13NPdvs5yVHGlEqMvqyWWaPzCQII5LpLZEtzp7iDzGSLYG/WzfNHSF2v8BYV/2TeEDp 1CRq0Q9qzbJd/WsM3KpmiIv5nUjgqZeU9MyrH2XwvTrL9UhUazq3Oe7MLUk23O+BnZpZVQnJT zy7Kid2oHKloSACzvYAq0RVUmT8gwYF+6kjVclB63JKTRhth1BW2xFPlqV645avOI12maAzIH tO2Tm+dixH+naZowUucMhWgYiVMXyVVZcIAx/HM3yAOslh9F543CU22DLwEqd30fTk9m+2TCT TWHKlU9fXdjwCuxkviWIezp4Z7NWrx3Ee1v+ZST4pMzAuKGgDbz815CSPC1XPdK9WdkJeYpW/ 79eYGae+No4xC+UU/2NRzT1EmKpLOoUxXCmu51TtBLEbuEce2tj4kwPHptgw7u7j0ysZlWLyX JHF/4Y6g+fGv27EqpoYna4faHReRw7ZhK6HLs6eKOXh90WP6OlEF19LSPIdcjtqh8EWJZ67PB F5tIDdxeIN+7EP691uxfm6a8HshgxB+ruXxZ3fGFMNh6PVQaNh9yvIdthuhOUp6IEd7oXiEqO nQtMoA== X-Spam-Status: No, score=-14.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org When -D_FORTIFY_SOURCE=2 was given during compilation, sprintf and similar functions will check if their first argument is in read-only memory and exit with *** %n in writable segment detected *** otherwise. To check if the memory is read-only, glibc reads form the file "/proc/self/maps". If opening this file fails due to too many open files (EMFILE), glibc will now ignore this error. Signed-off-by: Volker Weißmann --- sysdeps/unix/sysv/linux/readonly-area.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) -- 2.42.0 diff --git a/sysdeps/unix/sysv/linux/readonly-area.c b/sysdeps/unix/sysv/linux/readonly-area.c index edc68873f6..629163461a 100644 --- a/sysdeps/unix/sysv/linux/readonly-area.c +++ b/sysdeps/unix/sysv/linux/readonly-area.c @@ -42,7 +42,15 @@ __readonly_area (const char *ptr, size_t size) to the /proc filesystem if it is set[ug]id. There has been no willingness to change this in the kernel so far. */ - || errno == EACCES) + || errno == EACCES + /* Example code to trigger EMFILE: + while(1) { + FILE *file = fopen("/dev/zero", "r"); + assert(file != NULL); + } + If your libc was compiled with -D_FORTIFY_SOURCE=2, we run + into this if clause here. */ + || errno == EMFILE) return 1; return -1; }