From nobody Fri Sep 11 05:04:34 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 4hh2XL6gL6z6rbhh for ; Fri, 11 Sep 2026 05:04:34 +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 4hh2XL4ljxz4CVj for ; Fri, 11 Sep 2026 05:04:34 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789103074; 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=/5k+JMSnBljyKEvVmTACcwV6n1stEiG1cPpIzpk/gB4=; b=FPNJlKf8t4yS17eGtw5Xth8Sh/MhamgbUS/nCXbRAPS+YEAPexT7CicNRJpK342L0yvCbY dmrmFPQSRIxkVhlCj5FknJq5VFIJi2n3hKik5DhJBGzRuU8JjuLLQrg+v57Ice9jffPq+R Njlfbox060qoLiRhcvsdhaH6Qc3p9IyrcuJ7SJulRiBP3V09q0Pn8XYFKHklzLffubIhIq cAaN4axTIFkolDP1ig1R5x3uaJN05CSdKKkzZgNSolTxrbPcddQTfmzcVur/r2IAmHF3Qd ch/F+QcHzM3sgcQB6Y5zOOqzPGy/LPOszJeckmvn9waN09lx5ssf6IR1eTO1QQ== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1789103074; b=FMa3iY7zclo1uZxJx/3hVagyXK11K6bEzSZsXJxU+PRahcy4kPN4Y4PXzmdyf1awxVks/d WE28uciFsstrrUV8dX4bMhrbTJoW/sUxMQd/twK30Y691ShXYynbpQ4Sk5y2vHwWPf9p7P 9/SViqKCE4JpYqe1t3xFCkSdBGBRn3qRttkr5VxB0oGK/83vJYvsvv+VVHqn/frJ2l5ntn qLh3rAj5G1S0vJpsM75tBVonmwg5GhilVng3REzOG61kFYolPduXHw/CXWmbALKC578T7W JQck6LPKgmbvdGZvSCCDW3aZWreMijgnfTpBmBLxqsTMAF/wQ73KKd1JJ7WNxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789103074; 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=/5k+JMSnBljyKEvVmTACcwV6n1stEiG1cPpIzpk/gB4=; b=K39wk3qU8TziWgGUazKiIq8Er5wTqfRZI6XanOPAYoDvbb3L12Y0l60cHfr7I9fJ98M+Kc l4+PY3Ixj6R6TbXq53hWhHmDrcll8wkntXPeHm3s0rIQdGTj6AdqdS+8Jb1vWs/wlnbT7E 8cO51jLHhBrB7aJbbtof3GxYIA22iAykhilosLNPCGc8+msBv3XgeHeT0XomVogJj/fGHK 2hhxrhLRFk5pPlym/t794zWLYMN4vuuJYV9pAW+ZTUgWNZFV2gpLuOSrKCe7G6bZf9ZGuX BeNm4SJyYJVQfW/1EQ5ErkUJdd3I1RjC/n+ZOYzfKaGA0y5R+7CwesAi0SacEA== 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 4hh2XL3qstzyx4 for ; Fri, 11 Sep 2026 05:04:34 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3c03a by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 11 Sep 2026 05:04:34 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Warner Losh Subject: git: 8821d42d8be4 - main - loader.efi: Allow downloading of ramdisk or md to be aborted 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: imp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 8821d42d8be4c2dcf1f70a3ccc96a9c37bd85172 Auto-Submitted: auto-generated Date: Fri, 11 Sep 2026 05:04:34 +0000 Message-Id: <6aa38be2.3c03a.11865fae@gitrepo.freebsd.org> The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=8821d42d8be4c2dcf1f70a3ccc96a9c37bd85172 commit 8821d42d8be4c2dcf1f70a3ccc96a9c37bd85172 Author: Warner Losh AuthorDate: 2026-09-11 04:14:50 +0000 Commit: Warner Losh CommitDate: 2026-09-11 04:15:29 +0000 loader.efi: Allow downloading of ramdisk or md to be aborted Hitting will now allow one to abort a (possibly mistaken) download. Sponsored by: Netflix --- stand/efi/loader/memdisk.c | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/stand/efi/loader/memdisk.c b/stand/efi/loader/memdisk.c index 7e77a55e16c7..bb8ea63d0c5c 100644 --- a/stand/efi/loader/memdisk.c +++ b/stand/efi/loader/memdisk.c @@ -28,6 +28,17 @@ static EFI_GUID virtual_cd_guid = EFI_VIRTUAL_CD_GUID; static IPXE_DOWNLOAD_PROTOCOL *ipxe_download; static EFI_RAM_DISK_PROTOCOL *ram_disk; +static bool +download_cancel_requested(void) +{ + int c; + + if (!ischar()) + return (false); + c = getchar(); + return (c == '\033'); +} + struct dl_state; typedef struct dl_state dl_state; @@ -118,8 +129,8 @@ download_finish(IN VOID *Context, IN EFI_STATUS Status) ctx->in_progress = false; ctx->status = Status; - if (ctx->dctx) - decomp_fini(ctx->dctx, EFI_ERROR(Status)); + if (ctx->dctx != NULL && !EFI_ERROR(Status)) + decomp_fini(ctx->dctx, false); } static int @@ -167,7 +178,13 @@ download_md_image(const char *url) memset(&ctx, 0, sizeof(ctx)); ctx.size = sb.st_size; offset = 0; + printf("Press Esc to cancel.\n"); while ((nread = read(fd, buf, DOWNLOAD_BUFSIZE)) > 0) { + if (download_cancel_requested()) { + printf("\nDownload cancelled.\n"); + error = ECANCELED; + goto out_decomp; + } if (EFI_ERROR(download_chunk(&ctx, buf, nread, offset))) { error = EIO; goto out_decomp; @@ -224,7 +241,7 @@ maybe_download_initmd(void) printf("Downloading initmd from %s\n", url); error = download_md_image(url); - if (error != 0) + if (error != 0 && error != ECANCELED) printf("Could not download initmd: %s\n", strerror(error)); } @@ -236,8 +253,11 @@ do_download_ramdisk(CHAR8 *url, bool is_disk) EFI_DEVICE_PATH_PROTOCOL *ram_disk_path; IPXE_DOWNLOAD_FILE token; dl_state *ctx = &dl; + int error; printf("Downloading %s as a %s\n", url, is_disk ? "disk" : "cd"); + printf("Press Esc to cancel.\n"); + memset(ctx, 0, sizeof(*ctx)); ctx->in_progress = true; Status = ipxe_download->Start(ipxe_download, url, download_data, download_finish, &dl, &token); @@ -248,6 +268,22 @@ do_download_ramdisk(CHAR8 *url, bool is_disk) } while (ctx->in_progress) { ipxe_download->Poll(ipxe_download); + if (!ctx->in_progress) + break; + if (download_cancel_requested()) { + printf("\nCancelling download...\n"); + Status = ipxe_download->Abort(ipxe_download, token, + EFI_ABORTED); + if (EFI_ERROR(Status)) { + printf("Could not cancel download %u\n", + (unsigned)Status); + } + } + } + if (ctx->status == EFI_ABORTED) { + printf("Download cancelled.\n"); + download_cleanup(ctx); + return; } if (EFI_ERROR(ctx->status)) { printf("Download had error %u\n", (unsigned)ctx->status);