From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg1-x535.google.com (mail-pg1-x535.google.com [IPv6:2607:f8b0:4864:20::535]) by sourceware.org (Postfix) with ESMTPS id C68D3386C583 for ; Fri, 17 Jun 2022 11:58:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C68D3386C583 Received: by mail-pg1-x535.google.com with SMTP id g186so3897634pgc.1 for ; Fri, 17 Jun 2022 04:58:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:subject:message-id:mime-version :content-disposition; bh=SriN2RAIYieG17GysgyVaJd3c5heh5+6Rl6ZNcsB3T8=; b=yrv4HAn2H27kRwF1moo2O5HS01ZDzSV9/1tsQLfFVkk6sZirb8b29QG7xz16Tcsfwp 8IKU5QARqHAzrQsnI5Ggc4W/HKPbw/IYmx9tPko2M2N1nM7Bp31FZOZQZm4NZijQZ9c3 j4NRQUzNmM3VIuyK3ThlVfWEKFV2blEbf4P4P/kjjRjD+8L917Zo/6EjTdgH2c2g9OY1 54BNM8D5HgERirZaXVHM/xiy+Uqo/zCjt8C9m9wvYqm7VLccy+qWZLhohdn5vtKuFQ2w njp6oDc2vX4AAQJ2n+XZdIdVT1DztkBYSxaC70QkIRZaHhOiOdVC4RDSH2ertsbN7dgo JVaA== X-Gm-Message-State: AJIora/ozkttrgBlCUNinKzFwyOgptlQACMnfKnMGUR8/85cuEXrbEXT cdxqnxdm4qsTOiNPCDbKMF+msGpS728= X-Google-Smtp-Source: AGRyM1soNe0uAcWWjAjdW7yJKJ24R1pQUzq7rvblBLBzKwml513hyCgz7jBEGky/Zzw8AHDqANOTlA== X-Received: by 2002:a63:2447:0:b0:3fd:b97e:7f0f with SMTP id k68-20020a632447000000b003fdb97e7f0fmr8773219pgk.516.1655467089493; Fri, 17 Jun 2022 04:58:09 -0700 (PDT) Received: from squeak.grove.modra.org ([2406:3400:51d:8cc0:1527:8623:b4c:ebc4]) by smtp.gmail.com with ESMTPSA id ds12-20020a17090b08cc00b001e0c1044ceasm3107487pjb.43.2022.06.17.04.58.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jun 2022 04:58:08 -0700 (PDT) Received: by squeak.grove.modra.org (Postfix, from userid 1000) id 814321140CA7; Fri, 17 Jun 2022 21:28:06 +0930 (ACST) Date: Fri, 17 Jun 2022 21:28:06 +0930 From: Alan Modra To: binutils@sourceware.org Subject: PR29255, memory leak in make_tempdir Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Spam-Status: No, score=-3036.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_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Jun 2022 11:58:12 -0000 PR 29255 * bucomm.c (make_tempdir, make_tempname): Free template on all failure paths. diff --git a/binutils/bucomm.c b/binutils/bucomm.c index fdc2209df9c..4395cb9f7f5 100644 --- a/binutils/bucomm.c +++ b/binutils/bucomm.c @@ -537,8 +537,9 @@ make_tempname (const char *filename, int *ofd) #else tmpname = mktemp (tmpname); if (tmpname == NULL) - return NULL; - fd = open (tmpname, O_RDWR | O_CREAT | O_EXCL, 0600); + fd = -1; + else + fd = open (tmpname, O_RDWR | O_CREAT | O_EXCL, 0600); #endif if (fd == -1) { @@ -556,22 +557,23 @@ char * make_tempdir (const char *filename) { char *tmpname = template_in_dir (filename); + char *ret; #ifdef HAVE_MKDTEMP - return mkdtemp (tmpname); + ret = mkdtemp (tmpname); #else - tmpname = mktemp (tmpname); - if (tmpname == NULL) - return NULL; + ret = mktemp (tmpname); #if defined (_WIN32) && !defined (__CYGWIN32__) if (mkdir (tmpname) != 0) - return NULL; + ret = NULL; #else if (mkdir (tmpname, 0700) != 0) - return NULL; + ret = NULL; #endif - return tmpname; #endif + if (ret == NULL) + free (tmpname); + return ret; } /* Parse a string into a VMA, with a fatal error if it can't be -- Alan Modra Australia Development Lab, IBM