From nobody Thu Feb 16 20:37:34 2023 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4PHmwH25vqz3rVg0; Thu, 16 Feb 2023 20:37:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (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 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4PHmwH1H0tz3vyc; Thu, 16 Feb 2023 20:37:35 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1676579855; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=/ceWreJTICDSg5+OSZpN/mnzbQlnJrwD3fi0zuSQFjg=; b=sA54yPwQvSm78ZqcIuUdvY9pnRtln6P2T+2XSTAjn9f7QsbUGAUxAhz8nm+r+Z+Ua03tnC RIcujgQoZfujnR+OwL9Dj6WYUQGh54PqzjxYDQy0lqKTG9wGxzjcRpNEbszt9zu3DyMrOu TJ1AMCkUGBNEkzQqUQ1A4hrkwF+kGpwr1fbjWDhpFrlAyLHGTbetgfuAM0TpNC2wGRiCgP d9zcPPEaZJ0pPDvcVTIZ4aqPgfeCnf0x+CxPR+szCRcYVqKdqn0mt5g/sSUFWucDc2vNZk 1jFLFQifnOk6H7tCtwN6IYtuSelvoASBHmbjB7BWIKchgfTZg4SwvpzX+7fz0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1676579855; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=/ceWreJTICDSg5+OSZpN/mnzbQlnJrwD3fi0zuSQFjg=; b=kHjYPWhYuLi32NqV393bnl9hg2v97D/YKimLcKGGKhMxwsxHSzjRZ/j2qQjBNm+I6iwy/5 bnFLOJTi6OLW574DUsLvLTgqFcbyjjZKiXtKgGHzuRg7shApcmeFfkPmkjhLhOnOps2dvr id1imgohejOYUBEHK/XD/Mc1yvm57V36p7A8qcLTu59QcqepFiSx0yWO+EzwaL58RQlQYa /pEFguAC934T2cHkaMfK+RlOeqsqzi9yH0p7rWLCjvXkZt5BBts6vxGouRhKRnBXb08SIe RKftPuYIMGhr2h4Y3QloK3g+LYDCHvRJFIbGDCSvgstMk54K+LWacBIBS7LuuA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1676579855; a=rsa-sha256; cv=none; b=JaHCowjPxdboEO5ifpzVfYR2ddjAkLRDIMaru+dcfJ3mCo46iHb27g5kuCTfh8Leri+Je8 l3gbSFev4FWjG8/0dkEwpoh3qPkmUcZiILFKwL4DZFVvMTD/iteQ6CE+z+MBJ0YNaWLZiK 1z97gPlvSqPE0VcCWQ3Etw8S38w9kmiss+4qMQ0WA0Y3fjUaQ0agmA750DG0qx3pxSDHDs gTYqKRgMnG3Y2/UOrOakhrbDd9wXOvwC10UUwvw8FCculMNigMyDM7QNcsERni2EQakQU2 oEPNjzJoajwzsPSX3IZIW7DiYWPoKOeuOsuy7Mpz+PuoEG4IM/pihJJluFvGiw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4PHmwH0FZMzHqM; Thu, 16 Feb 2023 20:37:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 31GKbYsV002499; Thu, 16 Feb 2023 20:37:34 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 31GKbYuq002498; Thu, 16 Feb 2023 20:37:34 GMT (envelope-from git) Date: Thu, 16 Feb 2023 20:37:34 GMT Message-Id: <202302162037.31GKbYuq002498@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kyle Evans Subject: git: b2c5a01722f9 - main - config: push path() into moveifchanged() List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kevans X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b2c5a01722f9b18a56ab5459dceba1ae5e50fddd Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by kevans: URL: https://cgit.FreeBSD.org/src/commit/?id=b2c5a01722f9b18a56ab5459dceba1ae5e50fddd commit b2c5a01722f9b18a56ab5459dceba1ae5e50fddd Author: Kyle Evans AuthorDate: 2023-02-16 20:36:16 +0000 Commit: Kyle Evans CommitDate: 2023-02-16 20:36:42 +0000 config: push path() into moveifchanged() Every caller path()s its arguments anyways, just simplify these and push path() into moveifchanged(). This fixes a number of memory leaks in the process since path() allocates memory, which we will now free(). While we're here, make sure we close from_fd/to_fd appropriately. CID: 1471040, 1471714, 1472045, 1006907, 1006908 Reviewed by: emaste, imp Differential Revision: https://reviews.freebsd.org/D38641 --- usr.sbin/config/main.cc | 33 ++++++++++++++++++++++----------- usr.sbin/config/mkmakefile.cc | 6 +++--- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/usr.sbin/config/main.cc b/usr.sbin/config/main.cc index f155b7c5387a..66a071401183 100644 --- a/usr.sbin/config/main.cc +++ b/usr.sbin/config/main.cc @@ -579,7 +579,7 @@ configfile(void) p += strlen(KERNCONFTAG); fprintf(fo, "%s", p); fclose(fo); - moveifchanged(path("config.c.new"), path("config.c")); + moveifchanged("config.c.new", "config.c"); cfgfile_removeall(); } @@ -591,6 +591,7 @@ void moveifchanged(const char *from_name, const char *to_name) { char *p, *q; + char *from_path, *to_path; int changed; size_t tsize; struct stat from_sb, to_sb; @@ -598,17 +599,19 @@ moveifchanged(const char *from_name, const char *to_name) changed = 0; - if ((from_fd = open(from_name, O_RDONLY)) < 0) + from_path = path(from_name); + to_path = path(to_name); + if ((from_fd = open(from_path, O_RDONLY)) < 0) err(EX_OSERR, "moveifchanged open(%s)", from_name); - if ((to_fd = open(to_name, O_RDONLY)) < 0) + if ((to_fd = open(to_path, O_RDONLY)) < 0) changed++; if (!changed && fstat(from_fd, &from_sb) < 0) - err(EX_OSERR, "moveifchanged fstat(%s)", from_name); + err(EX_OSERR, "moveifchanged fstat(%s)", from_path); if (!changed && fstat(to_fd, &to_sb) < 0) - err(EX_OSERR, "moveifchanged fstat(%s)", to_name); + err(EX_OSERR, "moveifchanged fstat(%s)", to_path); if (!changed && from_sb.st_size != to_sb.st_size) changed++; @@ -619,23 +622,31 @@ moveifchanged(const char *from_name, const char *to_name) p = (char *)mmap(NULL, tsize, PROT_READ, MAP_SHARED, from_fd, (off_t)0); if (p == MAP_FAILED) - err(EX_OSERR, "mmap %s", from_name); + err(EX_OSERR, "mmap %s", from_path); q = (char *)mmap(NULL, tsize, PROT_READ, MAP_SHARED, to_fd, (off_t)0); if (q == MAP_FAILED) - err(EX_OSERR, "mmap %s", to_name); + err(EX_OSERR, "mmap %s", to_path); changed = memcmp(p, q, tsize); munmap(p, tsize); munmap(q, tsize); } + if (changed) { - if (rename(from_name, to_name) < 0) - err(EX_OSERR, "rename(%s, %s)", from_name, to_name); + if (rename(from_path, to_path) < 0) + err(EX_OSERR, "rename(%s, %s)", from_path, to_path); } else { - if (unlink(from_name) < 0) - err(EX_OSERR, "unlink(%s)", from_name); + if (unlink(from_path) < 0) + err(EX_OSERR, "unlink(%s)", from_path); } + + close(from_fd); + if (to_fd >= 0) + close(to_fd); + + free(from_path); + free(to_path); } static void diff --git a/usr.sbin/config/mkmakefile.cc b/usr.sbin/config/mkmakefile.cc index 472f85fa4bc2..969d32cf1389 100644 --- a/usr.sbin/config/mkmakefile.cc +++ b/usr.sbin/config/mkmakefile.cc @@ -184,7 +184,7 @@ makefile(void) } (void) fclose(ifp); (void) fclose(ofp); - moveifchanged(path("Makefile.new"), path("Makefile")); + moveifchanged("Makefile.new", "Makefile"); } static void @@ -327,7 +327,7 @@ makehints(void) } fprintf(ofp, "\"\\0\"\n};\n"); fclose(ofp); - moveifchanged(path("hints.c.new"), path("hints.c")); + moveifchanged("hints.c.new", "hints.c"); } /* @@ -369,7 +369,7 @@ makeenv(void) } fprintf(ofp, "\"\\0\"\n};\n"); fclose(ofp); - moveifchanged(path("env.c.new"), path("env.c")); + moveifchanged("env.c.new", "env.c"); } static void