From nobody Fri Sep 04 15:26:55 2026 X-Original-To: dev-commits-src-all@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 4hc0gm5TlKz6qqvH for ; Fri, 04 Sep 2026 15:27:00 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hc0gm4skcz3kr4 for ; Fri, 04 Sep 2026 15:27:00 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788535620; 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=asuFCxNx9qHYnkNZ1QUWHHo49bI8295fWBbrhZY/T0w=; b=ChcXFAMiRw+18i8Rwxx7IThkWCPVIWrpycl3wwTnyejJ0fhtxq3MW7yh4CNYJjow/mrb2J qwjRRVU/fU6NRkZxPH15TaOqBlSHkdQ4EhXWru8hsXIlaqvtO0eTlO7V7w7p83u3dVLZ3B kYRAjuAVWyLE3k55Pp9XN7qys4c7n74fW92A4peQiiHsBwVVbd59kdrtr6xY0S7tK2cILj JtuJAyHNH0ZwEeeDUErgQwM43sQS5a3Y1++yLvlVljx1IZ4vb5KK9t244T/RwzxZ1mJvT7 I5wuSN44zQivUOb4Bs7Kt3NoNuhRpOOsKwGH+TAhP0jE1yM7yfr0mBOAi0lT3Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1788535620; a=rsa-sha256; cv=none; b=Z7xXVtgcczwkrQiS3Vy5nvpTdLf/FqNf5/HJzLpILmw7JOpNeWoPt+Mt5BIQLEqjghOUxn x7cYs/2qhVWD81u/VjIMy3vwBm87KpWzVzTBLewAxkWMg1LK2xBX7djMuzSx7e4bm6icJy c1na9t5m3GjLnvPyNoSEKkNAB+LKve50fS5EslZtHV+FuLkrBpr+XV7jpCRDSLOrIT8r9J UflageISFrGd7du9YC6bfSfmDUPKBWBKn5okyJGZJcVuAF0dAGTWOnhJAT8PesBwXAe7d9 2lNFK2ACQzbUYNbRdOeK1FFcxIntW6DOeKzDAMZFP8uVyU0YZGZVkI1JJP+Zpw== 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=1788535620; 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=asuFCxNx9qHYnkNZ1QUWHHo49bI8295fWBbrhZY/T0w=; b=aY85Dp08G+hWD54qNdeC8p+oVjHEVfqTdkP5ui2N34g2xZnXYWkdmmiIJ+F2PEL9y5amk8 3V38t7PcWYYVUg7RcQfCXnC/b/70Ptq1jUmmBdfLeNKvBfh0KcMOj3iR5/aG7zTMbY14mT w5ZQ7zCSnm59sSfsfUAGF1uMKdx5FjLWFbyXL+FIkoAn6abpeh/miI/LM/rXmOb2bUBQl3 LpLZQiLG59OzB4ZkyroNS5Ffz0qR9sGhz/v2W5i6eqTG3Ic1QWAppEIreJ4rIJplpeeCzw 6yUajrZtylv8W34808/pFYOj7Fih5AmSPjqgBh26br2FASPDfppXegebSZnHFA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hc0gm3SgNz14cm for ; Fri, 04 Sep 2026 15:27:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3cee9 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 04 Sep 2026 15:26:55 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kyle Evans Subject: git: 619d09217720 - main - iuserboot: bump the interface to v6, add an accept_interpreter callback List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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: 619d09217720cb82f562b51e98576438dc11c830 Auto-Submitted: auto-generated Date: Fri, 04 Sep 2026 15:26:55 +0000 Message-Id: <6a9ae33f.3cee9.1e268ec4@gitrepo.freebsd.org> The branch main has been updated by kevans: URL: https://cgit.FreeBSD.org/src/commit/?id=619d09217720cb82f562b51e98576438dc11c830 commit 619d09217720cb82f562b51e98576438dc11c830 Author: Kyle Evans AuthorDate: 2026-09-04 15:26:35 +0000 Commit: Kyle Evans CommitDate: 2026-09-04 15:26:35 +0000 iuserboot: bump the interface to v6, add an accept_interpreter callback If an explicit loader wasn't requested, then bhyveload(8) maintains a /boot handle that it can use for swapping to a different flavor. This means that we expose all of the host /boot to the sandbox for the duration of script execution. Add a callback to ack that we're OK with the interpreter so that bhyveload(8) can release the bootfd. This is worth doing because it's prior to guest script execution, so we're still running a reasonably untainted process. Reviewed by: imp, jhb Differential Revision: https://reviews.freebsd.org/D58771 --- stand/userboot/userboot.h | 12 ++++++++++++ stand/userboot/userboot/main.c | 2 ++ usr.sbin/bhyveload/bhyveload.c | 23 ++++++++++++++++++----- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/stand/userboot/userboot.h b/stand/userboot/userboot.h index 34e8cb1d4bb2..1204f5e87f6f 100644 --- a/stand/userboot/userboot.h +++ b/stand/userboot/userboot.h @@ -46,6 +46,13 @@ */ #define USERBOOT_VERSION_5 5 +/* + * Version 6 added a callback for indicating that the guest + * is OK with the existing interpreter, so the host can close associated + * resources. The callback structure is still backward compatible. + */ +#define USERBOOT_VERSION_6 6 + /* * Exit codes from the loader */ @@ -225,4 +232,9 @@ struct loader_callbacks { * Version 5 addition. */ void (*swap_interpreter)(void *arg, const char *interp); + + /* + * Version 6 addition. + */ + void (*accept_interpreter)(void *arg); }; diff --git a/stand/userboot/userboot/main.c b/stand/userboot/userboot/main.c index 03f226c08bb9..d1f231a12e97 100644 --- a/stand/userboot/userboot/main.c +++ b/stand/userboot/userboot/main.c @@ -217,6 +217,8 @@ loader_main(struct loader_callbacks *cb, void *arg, int version, int ndisks) */ if (version >= USERBOOT_VERSION_5) check_interpreter(); + if (version >= USERBOOT_VERSION_6) + CALLBACK(accept_interpreter); if (setjmp(jb)) return; diff --git a/usr.sbin/bhyveload/bhyveload.c b/usr.sbin/bhyveload/bhyveload.c index 3b416b7a5ad5..5cf05b97a00c 100644 --- a/usr.sbin/bhyveload/bhyveload.c +++ b/usr.sbin/bhyveload/bhyveload.c @@ -102,6 +102,7 @@ enum { static struct termios term, oldterm; static int disk_fd[NDISKS]; static int ndisks; +static int bootfd = -1; static int consin_fd, consout_fd; static int hostbase_fd = -1; @@ -641,6 +642,16 @@ cb_swap_interpreter(void *arg __unused, const char *interp_req) longjmp(jb, JMP_SWAPLOADER); } +static void +cb_accept_interpreter(void *arg __unused) +{ + if (bootfd == -1) + return; + + close(bootfd); + bootfd = -1; +} + static struct loader_callbacks cb = { .getc = cb_getc, .putc = cb_putc, @@ -678,6 +689,9 @@ static struct loader_callbacks cb = { /* Version 5 additions */ .swap_interpreter = cb_swap_interpreter, + + /* Version 6 additions */ + .accept_interpreter = cb_accept_interpreter, }; static int @@ -760,7 +774,7 @@ hostbase_open(const char *base) } static void -loader_open(int bootfd) +loader_open(void) { int fd; @@ -790,9 +804,8 @@ main(int argc, char** argv) { void (*func)(struct loader_callbacks *, void *, int, int); uint64_t mem_size; - int bootfd, opt, error, memflags, need_reinit; + int opt, error, memflags, need_reinit; - bootfd = -1; progname = basename(argv[0]); memflags = 0; @@ -922,7 +935,7 @@ main(int argc, char** argv) if (error) err(1, "vm_setup_memory"); - loader_open(bootfd); + loader_open(); func = dlsym(loader_hdl, "loader_main"); if (!func) errx(1, "dlsym: %s", dlerror()); @@ -937,7 +950,7 @@ main(int argc, char** argv) addenv("smbios.bios.vendor=BHYVE"); addenv("boot_serial=1"); - func(&cb, NULL, USERBOOT_VERSION_5, ndisks); + func(&cb, NULL, USERBOOT_VERSION_6, ndisks); free(loader); return (0);