From nobody Sat Oct 24 01:18:23 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 4jBMTX3Gkrz6wqXg for ; Sat, 24 Oct 2026 01:18:24 +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 4jBMTX0Lx7z4LWn for ; Sat, 24 Oct 2026 01:18:24 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792804704; 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=azHCGCqdsRlCCYhyo5X8dauB/yVknDWW6fJu5zrVYFQ=; b=yVIrAwX5tpOeqkru1pzIdfHwKExBa7PMuqEraFhMb/9rmakOm01TjPS9F2XUoEM5891pKo a2uv1YuXxeIEZwflHGO58stVbbsnNxKMJ7npfQalTtAvJowwt060b31P/bcQ16obERR2uy PrsOwqkkZM94GkKlaZ/+1H/buOWo0gSyjt+yDeHb7vfvRDW4xbPtJZG9HIGjzeZIXiPCCo abBczRlWEm1WbTk3SGY4Z28m8eH6PLdCZfxyctrxZe/pytglRy5xOzSQ4N01HFabDqjUkE fHyIjTcFTxN37rmHXsHqoYbFUy9dV4sJ1sCik5aNq09/3/4xFREWN7JZub29ng== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1792804704; b=B4Zakm5JegyURDwV9CazZygV/PWwYLSzeGVT574exd/gQ4yXD/Uer5RtWUSjZcNw4zq2D9 hNNWI6LTn2uXY8IgRQUY44bvxj/msgcDNxTtZhosE9nVsGuxj9wuQNKAP0A2xFEKArUySt aK4RjHSQgOLc7xaXZ/hP6dFkOceLeT0zRlXGi1Ry6zmYfyym/4Unsvix4SnICov/7vIJcP ikuMDNSujfHTHkEAds5samDFRn/ZG1I+Nso1OD0yg2CweodR2vQmLINodjmJcNBz14J+Eo ZHyjTLPqcE2IRUcZoNSSV0OXfo+2i4wcqEHTXh9ef5IA5c6Xml+V85faam+qfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792804704; 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=azHCGCqdsRlCCYhyo5X8dauB/yVknDWW6fJu5zrVYFQ=; b=rWUdfNArM1mvsMLhbBQe2uqvCu/Ts2KgFABHXx9W2FpyeL3qEV+vgbgtrN/NmVSdjpljA8 HEk+2mBMGghwEmzzr0gV13lZeYuMOCMnS3g8ERIFImRB4yVzwPWq0aoksoMl2H/orK1Bcj ikj/qr/cH1O41WrdrDspzN6eprjnk0McwfSXbA7hIA2ElkjCzl9RKzTGFlKWadpwWD10DX aJdb/ThzXnDI1Ev7PQSqmX75VfEgCQR4uOceK13kakzgdMYLbdXBlDfF8pAdH/RCz16B80 Ui4Xc/CkmAg0+pyduu6FE/snZoDfD+Qwv/lqI+CVGt6hfzlAsfY9AMfXKTVWtw== 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 4jBMTW6cLLzvq3 for ; Sat, 24 Oct 2026 01:18:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 21c6a by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 24 Oct 2026 01:18:23 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Kyle Evans Subject: git: 844ed4975ace - stable/14 - 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/14 X-Git-Reftype: branch X-Git-Commit: 844ed4975aced639f431a1a19176f449466584f1 Auto-Submitted: auto-generated Date: Sat, 24 Oct 2026 01:18:23 +0000 Message-Id: <6adc075f.21c6a.1548e761@gitrepo.freebsd.org> The branch stable/14 has been updated by kevans: URL: https://cgit.FreeBSD.org/src/commit/?id=844ed4975aced639f431a1a19176f449466584f1 commit 844ed4975aced639f431a1a19176f449466584f1 Author: Kyle Evans AuthorDate: 2026-09-04 15:26:35 +0000 Commit: Kyle Evans CommitDate: 2026-10-23 02:52:52 +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 a3da1b0bfcba..12bec50774ac 100644 --- a/stand/userboot/userboot/main.c +++ b/stand/userboot/userboot/main.c @@ -212,6 +212,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);