From nobody Mon Feb 12 18:53:39 2024 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 4TYYWm06Wdz5BMWk; Mon, 12 Feb 2024 18:53:40 +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 4TYYWl6F6Qz4mFT; Mon, 12 Feb 2024 18:53:39 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1707764019; 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=uQ5eyEaHaAOnO9M3xALXtp5jLe9ARdaEMW3DBp/kkgw=; b=t6sZoPQ2qSx0tV2kqdawyN0DVq/bknEDFtE16VuXWmB7/Py+brrlD+w/DEZrddREfOmReG a1yUPHiTCkdLpLph5bY06g7/O9/6VOt1tMXiJpctWprIZziS+lEGYEV1Hp0pbna4KM3oO/ YZXkoPWLMG2N2YrtA42RYe4VCoxs4g47czvXZ4kfyd3r7VltnvhcQOBsknebSobRWNhwlM i7W+QdimA2mRES/3tylk7uEqUA8IskMMMeQBHVZ5hSD267AFqQSwn50r/ul+HCQjNzrb8d YeLPkJ8LjrBctsUem6Q2XSMGrpsim5+NqC6Ny5b1dZ/+Y5fZnNSwzSmnGpBshg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1707764019; a=rsa-sha256; cv=none; b=hneEEsSetP6yan8HmS6rrD8mPyP8fYcJtJn54c0eMy7+/ZoBKnoUT3kFdaNF7AMwa7Ddm7 0YDSmVlw4W51IA/ueJtgV0v7a+1slyF4D20QfARrSQUTlXlGt8/TtCvuFChAntFIQZ0F+T TTmKfPKjRILcK2vFCONSsHM+DSlyzJXPQvoT2pGkgK7FQ5MrMTntdXs+nhgfm7N65gpko8 7h1umqLa0RiSnskdWKa2OAhY1Agri16hpdkd6mt+POP6fJD+LIGsgrAaGrp0TMoGsDcc9L OaQqOOeD9J6VzUpXZaSqYCF5RlsL0DwRsWJZhZ1XufH5f1DfiYmz6XbbjDx/tg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1707764019; 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=uQ5eyEaHaAOnO9M3xALXtp5jLe9ARdaEMW3DBp/kkgw=; b=Jqa8n7bftxnkn5NJlXNqFDCWICLhyS0G/9A5wAjkR6KqH+Na63kDjKwWaNCMl3+QI59/KU 0ktCUaZ2LoERX1xAZgmDCwR2wz0oeFhyDnfDlti9JBR8Lz/dXHPzKLiGCpz2dDQxZ6CUK1 2Nc2DWocbe1V+8fY4Fn3DyV7hJp6Bzc9yeFhGjB7BMEI9giMAiflU1/68gSRfnzYsxQNYo BELtqAcE6G3zsVjhusn6y10+7F2VMO4HUrOkL2vXNd3oRxP7x9ZroXvxcXIf6Y7mnZ5wxF ElbwclSlGtBEHM77KEQlAvYhsenMNiFQHvSOqvrkIBW6pcmKOoEZObno56St4Q== 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 4TYYWl5L27zjqh; Mon, 12 Feb 2024 18:53:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 41CIrd5a030525; Mon, 12 Feb 2024 18:53:39 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 41CIrdiP030522; Mon, 12 Feb 2024 18:53:39 GMT (envelope-from git) Date: Mon, 12 Feb 2024 18:53:39 GMT Message-Id: <202402121853.41CIrdiP030522@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Warner Losh Subject: git: cfeedadfbde0 - main - reboot: Add sanity checking of write to nextboot.conf 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: imp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: cfeedadfbde084e25ace99a370f3f417b78f5df7 Auto-Submitted: auto-generated The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=cfeedadfbde084e25ace99a370f3f417b78f5df7 commit cfeedadfbde084e25ace99a370f3f417b78f5df7 Author: Warner Losh AuthorDate: 2024-02-12 18:45:20 +0000 Commit: Warner Losh CommitDate: 2024-02-12 18:45:20 +0000 reboot: Add sanity checking of write to nextboot.conf Add sanity checking to the write to nextboot. Move to separate function and allow force to override all errors. If we can't write nextboot.conf, don't silently fail anymore. Sponsored by: Netflix Reviewed by: kevans, kib, markj, jhb Differential Revision: https://reviews.freebsd.org/D43803 --- sbin/reboot/reboot.c | 47 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/sbin/reboot/reboot.c b/sbin/reboot/reboot.c index 4eb5e8590589..74f8cf01b3b7 100644 --- a/sbin/reboot/reboot.c +++ b/sbin/reboot/reboot.c @@ -49,17 +49,52 @@ #include #include +#define PATH_NEXTBOOT "/boot/nextboot.conf" + static void usage(void) __dead2; static uint64_t get_pageins(void); static bool dohalt; +static void +write_nextboot(const char *fn, const char *kernel, bool force) +{ + FILE *fp; + +#define E(...) do { \ + if (force) { \ + warn( __VA_ARGS__ ); \ + return; \ + } \ + err(1, __VA_ARGS__); \ + } while (0) \ + + fp = fopen(fn, "w"); + if (fp == NULL) + E("Can't create %s to boot %s", fn, kernel); + + if (fprintf(fp, + "nextboot_enable=\"YES\"\n" + "kernel=\"%s\"\n", kernel) < 0) { + int e; + + e = errno; + fclose(fp); + if (unlink(fn)) + warn("unlink %s", fn); + errno = e; + E("Can't write %s", fn); + } + fclose(fp); +#undef E +} + int main(int argc, char *argv[]) { struct utmpx utx; const struct passwd *pw; - int ch, howto, i, fd, sverrno; + int ch, howto, i, sverrno; bool fflag, lflag, nflag, qflag, Nflag; uint64_t pageins; const char *user, *kernel = NULL; @@ -147,15 +182,7 @@ main(int argc, char *argv[]) errx(1, "%s is not a file", k); free(k); } - fd = open("/boot/nextboot.conf", O_WRONLY | O_CREAT | O_TRUNC, - 0444); - if (fd > -1) { - (void)write(fd, "nextboot_enable=\"YES\"\n", 22); - (void)write(fd, "kernel=\"", 8L); - (void)write(fd, kernel, strlen(kernel)); - (void)write(fd, "\"\n", 2); - close(fd); - } + write_nextboot(PATH_NEXTBOOT, kernel, fflag); } /* Log the reboot. */