From nobody Sat Oct 24 01:18:03 2026 X-Original-To: dev-commits-src-branches@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 4jBMT809gdz6wqVd for ; Sat, 24 Oct 2026 01:18:04 +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) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4jBMT7676vz4Ksh for ; Sat, 24 Oct 2026 01:18:03 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792804683; 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=lUoa5Gu0HFVf5+VtLzOwmgz5SeN+UphKl2Mo8QL+N3g=; b=cE45l8n5+IfLNkd0RSKGDEpIz9qQVmsK2QlVCGbCrHNAgcD0DzHv1pbtWscCLtfKj3P3jO /FJ8JXrV3d/F3McpZiuFbdvKMtJLuF9pIIbQSaycWR/dD1SEUvyh/f1i/xyJVdJOPB/NNQ /68WuV05Mwhvh3Yp/0EpK3Cq+afUAH7nwCKQL28k1Sju5nHW/MCI9epVJbIF7KAAmELjbz lBWgeNQnTFbZuPttcoNd4WFm3ClkxKZ8N98CX2kYmUITQ9P70wkL6pSLw6Q/7k+moNNjow gRC6zM+IywPbNMLp0/uWnWGLArcEQ/uL58+G11+0pG3gG+9GzCwzM0YJhlWvAA== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1792804683; b=UvALrqxEoa2G03rK7ljjE2kxtlTsSMNrmDHWQZDeNXsLrIP8PWg3UzXGr54s5hg5Y9GDdG LNXJ/wTuD/L4aQ3hbxVtoDA4WPdrz+BHKc3Z3CT/+87fLgorSVxwS1D0fUJxHvQofKK4Vw w3QfWjHeqVMYygsHMP+ix2tMALbfmwQSDMQS2yEzQGSmT2HIfe+63/HvxpwxxzoTdpRoLU yzXUsUwY7TWhhFCsSenFj9/an88NyW47S2/my3q/GP8EctofDqeMRGPgzz+a8wRkSSfOJ6 C0g6ajDcLnwgQFqDsixdD6ayL4Ew71fjgIedIl/bwg011TKEUd/iHWKiuPYKVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792804683; 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=lUoa5Gu0HFVf5+VtLzOwmgz5SeN+UphKl2Mo8QL+N3g=; b=AZn7U4kSsOkHK2ic8D+Xv1SK+Etj+Ot3Sbq3u6J9juxaMaBAsl8D50a+aW1IBeYoXjCpx1 Sw1TrwabwI9Vw9cwopI1Sfo16lpmrT6iM0usXfshARlRFDDvrN214EtqyEyHPYkPyErDXp zMaZg4YwugKtooTZKL+fPmyZmPagEYJogIS4DuKVAyhZ6pOv4nYdbqtb5qK/HCZ24BNAyn EYChQh6tHwjlEOBID7hB5kqij0n6FbHNyMWOGHek+MH5swxnV+Y6uIwAz1nsZV6gnWZCT6 pe7NT2unneUZmEyRiXqlLiLljQYo0PF7NdISTNd7kfZnstlg7xU7lnIGdjXpuw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4jBMT75Fxrzw0J for ; Sat, 24 Oct 2026 01:18:03 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 20676 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 24 Oct 2026 01:18:03 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Kyle Evans Subject: git: 84ec2d3b67df - stable/15 - iuserboot: bump the interface to v6, add an accept_interpreter callback List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org List-Id: Commits to the stable branches of the FreeBSD src repository 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/stable/15 X-Git-Reftype: branch X-Git-Commit: 84ec2d3b67dffadd2c0c839a1fab621e63ce0b68 Auto-Submitted: auto-generated Date: Sat, 24 Oct 2026 01:18:03 +0000 Message-Id: <6adc074b.20676.4260f1f@gitrepo.freebsd.org> The branch stable/15 has been updated by kevans: URL: https://cgit.FreeBSD.org/src/commit/?id=84ec2d3b67dffadd2c0c839a1fab621e63ce0b68 commit 84ec2d3b67dffadd2c0c839a1fab621e63ce0b68 Author: Kyle Evans AuthorDate: 2026-09-04 15:26:35 +0000 Commit: Kyle Evans CommitDate: 2026-10-24 01:17:41 +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 (cherry picked from commit 619d09217720cb82f562b51e98576438dc11c830) --- 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 b518e18020f8..985933bf51e9 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 3f29d642461d..ebc6f9618691 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; @@ -652,6 +653,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, @@ -689,6 +700,9 @@ static struct loader_callbacks cb = { /* Version 5 additions */ .swap_interpreter = cb_swap_interpreter, + + /* Version 6 additions */ + .accept_interpreter = cb_accept_interpreter, }; static int @@ -790,7 +804,7 @@ hostbase_open(const char *base) } static void -loader_open(int bootfd) +loader_open(void) { int fd; @@ -820,9 +834,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; @@ -950,7 +963,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()); @@ -965,7 +978,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);