From patchwork Mon Jan 24 16:54:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Siddhesh Poyarekar X-Patchwork-Id: 50409 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 97A69385801C for ; Mon, 24 Jan 2022 16:54:41 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 97A69385801C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1643043281; bh=75fgIQCg6rE6swZBeHJQhZgvc3cBpSlscPjV3vSwE7A=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=fHLJmAtPxIhTV+fsZmCbmXsDdIxylqhFG17MZUuAF9lcSqg5NIXkepTvUqJW/7qTd CDiTwWQYMvxEQn2/S0pvLcfETjGkmNiZr6wsNL2ZT12LPBxvbsxLEUZ+FjsRWdksdM wE3oJUoSCxWKOiX70AsKWMVsA15wVBPN5jVlzH9s= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from bumble.birch.relay.mailchannels.net (bumble.birch.relay.mailchannels.net [23.83.209.25]) by sourceware.org (Postfix) with ESMTPS id C74AF3858D3C for ; Mon, 24 Jan 2022 16:54:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C74AF3858D3C 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 EC53F21476 for ; Mon, 24 Jan 2022 16:54:18 +0000 (UTC) Received: from pdx1-sub0-mail-a307.dreamhost.com (unknown [127.0.0.6]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id AA40B2110B for ; Mon, 24 Jan 2022 16:54:18 +0000 (UTC) X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from pdx1-sub0-mail-a307.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.115.218.24 (trex/6.4.3); Mon, 24 Jan 2022 16:54:18 +0000 X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|siddhesh@gotplt.org X-MailChannels-Auth-Id: dreamhost X-Tangy-Whistle: 60629bb5705fb3be_1643043258827_1474310694 X-MC-Loop-Signature: 1643043258827:3196317602 X-MC-Ingress-Time: 1643043258827 Received: from rhbox.redhat.com (unknown [1.186.122.50]) (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-a307.dreamhost.com (Postfix) with ESMTPSA id 4JjGKj29Mbz1Ph for ; Mon, 24 Jan 2022 08:54:16 -0800 (PST) To: libc-alpha@sourceware.org Subject: [PATCH] realpath: Do not copy result on failure (BZ #28815) Date: Mon, 24 Jan 2022 22:24:09 +0530 Message-Id: <20220124165409.1112537-1-siddhesh@sourceware.org> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Spam-Status: No, score=-3494.3 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, 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" On failure, the contents of the resolved buffer passed in by the caller to realpath are undefined. Do not copy any partial resolution to the buffer and also do not test resolved contents in test-canon.c. Resolves: BZ #28815 Signed-off-by: Siddhesh Poyarekar Reviewed-by: Adhemerval Zanella --- stdlib/canonicalize.c | 4 ++-- stdlib/test-canon.c | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/stdlib/canonicalize.c b/stdlib/canonicalize.c index 6caed9e70e..6237a41d42 100644 --- a/stdlib/canonicalize.c +++ b/stdlib/canonicalize.c @@ -400,11 +400,11 @@ realpath_stk (const char *name, char *resolved, error: *dest++ = '\0'; - if (resolved != NULL) + if (!failed && resolved != NULL) { if (dest - rname <= get_path_max ()) rname = strcpy (resolved, rname); - else if (!failed) + else { failed = true; __set_errno (ENAMETOOLONG); diff --git a/stdlib/test-canon.c b/stdlib/test-canon.c index 185ccf4f48..2ad1218749 100644 --- a/stdlib/test-canon.c +++ b/stdlib/test-canon.c @@ -174,7 +174,9 @@ do_test (int argc, char ** argv) continue; } - if (!check_path (buf, tests[i].out ? tests[i].out : tests[i].resolved)) + /* Only on success verify that buf contains the result too. */ + if (result != NULL + && !check_path (buf, tests[i].out ? tests[i].out : tests[i].resolved)) { printf ("%s: flunked test %d (expected resolved `%s', got `%s')\n", argv[0], i, tests[i].out ? tests[i].out : tests[i].resolved,