From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from donkey.elm.relay.mailchannels.net (donkey.elm.relay.mailchannels.net [23.83.212.49]) by sourceware.org (Postfix) with ESMTPS id BFF46383583F for ; Mon, 17 May 2021 16:00:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org BFF46383583F 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 842A6322669 for ; Mon, 17 May 2021 16:00:30 +0000 (UTC) Received: from pdx1-sub0-mail-a84.g.dreamhost.com (100-105-161-139.trex.outbound.svc.cluster.local [100.105.161.139]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 7ABD632328A for ; Mon, 17 May 2021 16:00:23 +0000 (UTC) X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from pdx1-sub0-mail-a84.g.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384) by 100.105.161.139 (trex/6.2.1); Mon, 17 May 2021 16:00:30 +0000 X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|siddhesh@gotplt.org X-MailChannels-Auth-Id: dreamhost X-Shrill-Bubble: 4a3290874db2ff1e_1621267229307_3441984301 X-MC-Loop-Signature: 1621267229307:2779865150 X-MC-Ingress-Time: 1621267229306 Received: from pdx1-sub0-mail-a84.g.dreamhost.com (localhost [127.0.0.1]) by pdx1-sub0-mail-a84.g.dreamhost.com (Postfix) with ESMTP id A91A889A91 for ; Mon, 17 May 2021 09:00:20 -0700 (PDT) Received: from [192.168.1.111] (unknown [1.186.101.110]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: siddhesh@gotplt.org) by pdx1-sub0-mail-a84.g.dreamhost.com (Postfix) with ESMTPSA id 12A1D8844E for ; Mon, 17 May 2021 09:00:18 -0700 (PDT) Subject: [PING][PATCH] ldconfig: Fix memory leaks To: libc-alpha@sourceware.org References: <20210511171627.360100-1-siddhesh@sourceware.org> X-DH-BACKEND: pdx1-sub0-mail-a84 From: Siddhesh Poyarekar Message-ID: Date: Mon, 17 May 2021 21:30:13 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: <20210511171627.360100-1-siddhesh@sourceware.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-3494.6 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_H3, RCVD_IN_MSPIKE_WL, 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-List-Received-Date: Mon, 17 May 2021 16:00:36 -0000 Ping! On 5/11/21 10:46 PM, Siddhesh Poyarekar via Libc-alpha wrote: > Coverity discovered that paths allocated by chroot_canon are not freed > in a couple of routines in ldconfig. > --- > elf/ldconfig.c | 23 +++++++++++++++-------- > 1 file changed, 15 insertions(+), 8 deletions(-) > > diff --git a/elf/ldconfig.c b/elf/ldconfig.c > index 28ed637a29..3192aa49d9 100644 > --- a/elf/ldconfig.c > +++ b/elf/ldconfig.c > @@ -693,8 +693,7 @@ manual_link (char *library) > if (real_path == NULL) > { > error (0, errno, _("Can't find %s"), path); > - free (path); > - return; > + goto out; > } > real_library = alloca (strlen (real_path) + strlen (libname) + 2); > sprintf (real_library, "%s/%s", real_path, libname); > @@ -709,16 +708,14 @@ manual_link (char *library) > if (lstat64 (real_library, &stat_buf)) > { > error (0, errno, _("Cannot lstat %s"), library); > - free (path); > - return; > + goto out; > } > /* We don't want links here! */ > else if (!S_ISREG (stat_buf.st_mode)) > { > error (0, 0, _("Ignored file %s since it is not a regular file."), > library); > - free (path); > - return; > + goto out; > } > > if (process_file (real_library, library, libname, &flag, &osversion, > @@ -726,14 +723,16 @@ manual_link (char *library) > { > error (0, 0, _("No link created since soname could not be found for %s"), > library); > - free (path); > - return; > + goto out; > } > if (soname == NULL) > soname = implicit_soname (libname, flag); > create_links (real_path, path, libname, soname); > free (soname); > +out: > free (path); > + if (path != real_path) > + free (real_path); > } > > > @@ -920,8 +919,16 @@ search_dir (const struct dir_entry *entry) > /* Remove stale symlinks. */ > if (opt_link && strstr (direntry->d_name, ".so.")) > unlink (real_file_name); > + > + if (opt_chroot) > + free (target_name); > + > continue; > } > + > + if (opt_chroot) > + free (target_name); > + > is_dir = S_ISDIR (stat_buf.st_mode); > > /* lstat_buf is later stored, update contents. */ >