From nobody Thu Oct 19 19:23:02 2023 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 4SBHgB5WY8z4xnBb; Thu, 19 Oct 2023 19:23:02 +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 4SBHgB52Czz3cBy; Thu, 19 Oct 2023 19:23:02 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1697743382; 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=hlgIspg85XvTMjJe2tPnvsL36pQX9e+4ZH/mTycK3U4=; b=JUE4Hx/kg7KNxrXTAyN0tR831lPiyscZCbE9b/Z0hWvo5Lrlw26SBX7JPNuC0XgBAKzzOj AdYmrQIkbI07wp9GGsEkZEG8NTRhFJ8GXi6h8JQHZUZdr1PHBEDNldkuY1fvEe1EPG/tLg 9sJ8rjjfhRXBT59dpQjn2VDqk6Qhmw6pJXkXkDYoa+H7ZFVMk8IyjOLtCpft/jZvZfcpsx jdlQ4bajLHcZ1PyudcfhgA9HlPftYDHt8aEs3FgO96uDie+ftZ9cBVn++67mxtjWbyoucQ uypbR5Pi5nFLC6fT0GwT00hA1IZZXJAM+CT3pFrDYfsb4aJCn0h2ap3kBxSjeQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1697743382; a=rsa-sha256; cv=none; b=eoLc18N+FVpsyhohLYBortqQq8ExvXzC3+UJGIH4i0FlHIxvHggGg7YPVJckSUTXlbnImX eJzo3Bd4+9p5HOt1Vfl4co7Q4xSYEQY5OCawrAiz3DI42NB8Xr0VFze9n5U2tKvGz3Fkzz z0doYL8gcE2fqqyIC8BBAFhHOqQtEb4pGhi3ZnTLigSb+76JGrsK016LHA7jqVrJm5HnDG CCRkWtber2yahPirivFxpXNxRnqy2S8sbMTyEWsUoLTu9s1T3NXvcQWzyo2kLTEwi7v0BK lERLcBbjl1op1vYTals67Byj1VqdURiUkIxluXAhHEpV0auqs9XNCm14PfP6jA== 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=1697743382; 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=hlgIspg85XvTMjJe2tPnvsL36pQX9e+4ZH/mTycK3U4=; b=MNAliUbbulBZZXN2+iVz56zfdpFliBParSUIVFtFPprXa91lAMzqmoaQ9ATsKtPaLfJw/5 v3YF5GjXLOCCmbBsmK02Lcmq+sCXKbgyDQd6DZE6D1uRz6lglorRaSubZj6qbZIiVud1tw tC0lApbWXcWizneRVT3iB5PataiNUPPR8bdNQ2IF8KVI/PUhMAgZruNjv4PDqRl/el43pJ 2Xe6JRAOviv8jMfII8bg3Lmtmp9sAsDe3Be64ge4S2HHsAnIZzYgU0mb1E0gGh1OaAv4MG eUmNp4o64bVjMpGk0hDFSfHD0didF3IADceWn4oT+nwV3I4tXkxjicR0gMqVeg== 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 4SBHgB44jgz12mk; Thu, 19 Oct 2023 19:23:02 +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 39JJN2sn076635; Thu, 19 Oct 2023 19:23:02 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 39JJN2HZ076632; Thu, 19 Oct 2023 19:23:02 GMT (envelope-from git) Date: Thu, 19 Oct 2023 19:23:02 GMT Message-Id: <202310191923.39JJN2HZ076632@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Warner Losh Subject: git: d99f6566d53d - releng/14.0 - mkimg: Ensure GPT Entry Array is at least 16k List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@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/releng/14.0 X-Git-Reftype: branch X-Git-Commit: d99f6566d53d86e4ec1854e0c602ea7ed7ded48d Auto-Submitted: auto-generated The branch releng/14.0 has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=d99f6566d53d86e4ec1854e0c602ea7ed7ded48d commit d99f6566d53d86e4ec1854e0c602ea7ed7ded48d Author: Warner Losh AuthorDate: 2023-10-18 15:23:40 +0000 Commit: Warner Losh CommitDate: 2023-10-19 18:37:44 +0000 mkimg: Ensure GPT Entry Array is at least 16k UEFI v2.10 Section 5.3 documentes that the minimum reserved space after the GPT header be at least 16kB. Enforce this minimum. Before, we'd only set the number of entries to be the unpadded size. gpart's selective enforcement of aspects of the GPT standard meant that these images would work, but couldn't be changed (to add a partition or grow the size of a partition). This ensures that gpart's overly picky standards don't cause problems for people wishing to, for example, resize release images. MFC after: 1 day (we want this in 14.0) PR: 274312 Sponsored by: Netflix Reviewed by: emaste Differential Revision: https://reviews.freebsd.org/D42245 (cherry picked from commit 9b42d3e12ffc6896fcb4e60c1b239ddf60705831) (cherry picked from commit 5401ebd33cf5073e8c0f095527504d38f74a926b) Approved-by: re (cperciva) --- sys/sys/disk/gpt.h | 7 +++++++ usr.bin/mkimg/gpt.c | 16 ++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/sys/sys/disk/gpt.h b/sys/sys/disk/gpt.h index e48b13684814..596a5cba1681 100644 --- a/sys/sys/disk/gpt.h +++ b/sys/sys/disk/gpt.h @@ -82,6 +82,13 @@ struct gpt_hdr { CTASSERT(offsetof(struct gpt_hdr, padding) == 92); #endif +/* + * The GPT standard (section 5.3 of UEFI standard version 2.10) requires + * we reserve at least 16k after the PMBR and the GPT header for the GPT + * Array Entries. + */ +#define GPT_MIN_RESERVED 16384 + struct gpt_ent { gpt_uuid_t ent_type; gpt_uuid_t ent_uuid; diff --git a/usr.bin/mkimg/gpt.c b/usr.bin/mkimg/gpt.c index 59c51a6a177b..ed3f008c394f 100644 --- a/usr.bin/mkimg/gpt.c +++ b/usr.bin/mkimg/gpt.c @@ -24,7 +24,7 @@ * SUCH DAMAGE. */ -#include +#include #include #include #include @@ -124,13 +124,21 @@ crc32(const void *buf, size_t sz) return (crc ^ ~0U); } +/* + * Return the number of sectors needed to store the partition table. + */ static u_int gpt_tblsz(void) { - u_int ents; + u_int eps; /* Entries per Sector */ - ents = secsz / sizeof(struct gpt_ent); - return ((nparts + ents - 1) / ents); + /* + * Count the number of sectors needed for the GPT Entry Array to store + * the number of partitions defined for this image. Enforce the 16kB + * minimum space for the GPT Entry Array per UEFI v2.10 Section 5.3. + */ + eps = secsz / sizeof(struct gpt_ent); + return (MAX(howmany(GPT_MIN_RESERVED, secsz), howmany(nparts, eps))); } static lba_t