From nobody Mon Apr 13 17:39:40 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 4fvZRK09tYz6ZT1w for ; Mon, 13 Apr 2026 17:39:41 +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 "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fvZRJ6H4hz3R0x for ; Mon, 13 Apr 2026 17:39:40 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776101980; 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=Mra76PogTbD9AQaQ5voP03GpKaXJESlU4tQIvZU5CYg=; b=OjtpUr+EF5zPvPgiio5MId4O4SpHPzmgJxATJjLcvdHm6e9FgzRGfYckHZRQl4rtkU+he+ jso5aYizzwxzDOgwRDIHMnom+SAm9xrWidll3XKHqW9RYv6C7mQmvZBk8sMvkxDodVdduh FD1sU5NlQil0z6Wjgx5bvNY0z15BYOf9H0VPUly8g58QBHwKe0J6jLBHXHspwOSi1FcEWo 0OMy7W7vPUBIavUnXFl2ACjuJmrqYRgU0Q7V+MNvXmWv+DS5FkTKTC5YzH81r7demteNcS B5psK0gEWL4H696kt3vAOYPa+MmWbWu2bsOFxNa9zzXFWYK2LHraF2EtTQLWLA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1776101980; a=rsa-sha256; cv=none; b=SgkTHlSLTBiwIqRNNqkYKVsZsZp5sW8ILIdlyRX+Op7bU+ZDC2O6wLXWHfBlF1l5OpgEMZ jpAmMibNs1eze4KvVRx4X5+FXShTGBO2vvzcjXvFPx6hiTvLFEkN1bdEyCOt9vFAgzCXuZ frKDTstSJJYTuUFwb1TTJGtEnUfW5ZszcdJ2pj3w0OJ62s56UGNxxGKiRDeEptYr6NmSpb 25WZR4mMqvsXv5rVlNxschIU5DEdCyRGYhD8nfW9GTo9MQV76bbr8vACiu7F7RMqGiz6aT kOlBm+N6d5pPM3zmZGOBOC0z+bqw8TCnIAGFpjfzXjZCFFa3aSX1nJeayp4pAw== 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=1776101980; 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=Mra76PogTbD9AQaQ5voP03GpKaXJESlU4tQIvZU5CYg=; b=rUZJGJWAzF1t0ZQaPIK235Lv1t2xBgTIHUCdt/h/l4Ngl5feCVV5YiOTOKrslvt0cmY4pB vC+3RIa9m3bM5GgkomqY4VIj70wcpmN2tZuGu3/k4WHi1zJJITuz0E1XeW1UUeadpgOROY LpkUXUkM+nM83bl9LIDt4vXTx61XeEezw8kFe+8Iodu9EaRttCuH6fzqL3eIZB52OvM3gO tUXS/i2MLP7nygVPvGUww4jEZfI/qK/zRUGN0a/ym+ajSGSu2A5LlpL8V2wdTOTzHYAgvg bYMUSd1t4eLx4Lr5X610jdY2t5X+k0DhKS8R51iZ6a9jW5MGghlt0fiM3w+Jeg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fvZRJ5sdvz1CNF for ; Mon, 13 Apr 2026 17:39:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 342b0 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 13 Apr 2026 17:39:40 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: c4266d84c56f - stable/14 - tunefs: Better fix for arm64 alignment issues 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: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: c4266d84c56f845945349a83801d99ca9ecf5d3a Auto-Submitted: auto-generated Date: Mon, 13 Apr 2026 17:39:40 +0000 Message-Id: <69dd2a5c.342b0.4e5c1108@gitrepo.freebsd.org> The branch stable/14 has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=c4266d84c56f845945349a83801d99ca9ecf5d3a commit c4266d84c56f845945349a83801d99ca9ecf5d3a Author: Dag-Erling Smørgrav AuthorDate: 2026-04-07 13:54:28 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-04-13 17:39:36 +0000 tunefs: Better fix for arm64 alignment issues Rather than trust that the compiler will lay out the stack frame the way we expect it to, use a union to force the correct alignment. MFC after: 1 week Fixes: 616f47f176c3 ("tunefs: Fix alignment warning on arm64") Reviewed by: kevans, mckusick Differential Revision: https://reviews.freebsd.org/D56245 (cherry picked from commit 8244dd326265867293b2286efc3d571f06ef0dab) tunefs: Fix pointer arithmetic While here, remove a bogus const which has been there for years. MFC after: 1 week Reported by: ivy@ Fixes: 1b83e8a3f840 ("Constify string pointers.") Fixes: 8244dd326265 ("tunefs: Better fix for arm64 alignment issues") Reviewed by: kevans Differential Revision: https://reviews.freebsd.org/D56343 (cherry picked from commit 9d95d806691e4ef1411c6c3b892d8b774754d724) --- sbin/tunefs/tunefs.c | 64 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/sbin/tunefs/tunefs.c b/sbin/tunefs/tunefs.c index 4dbdaf3db574..ae52143beeaf 100644 --- a/sbin/tunefs/tunefs.c +++ b/sbin/tunefs/tunefs.c @@ -56,6 +56,7 @@ static char sccsid[] = "@(#)tunefs.c 8.2 (Berkeley) 4/19/94"; #include #include +#include #include #include #include @@ -63,6 +64,7 @@ static char sccsid[] = "@(#)tunefs.c 8.2 (Berkeley) 4/19/94"; #include #include #include +#include #include #include #include @@ -84,6 +86,11 @@ static int journal_alloc(int64_t size); static void journal_clear(void); static void sbdirty(void); +typedef union { + char buf[MAXBSIZE]; + struct direct dir; +} dirblock; + int main(int argc, char *argv[]) { @@ -643,16 +650,17 @@ journal_balloc(void) static ino_t dir_search(ufs2_daddr_t blk, int bytes) { - char block[MAXBSIZE]; + dirblock block; struct direct *dp; int off; - if (bread(&disk, fsbtodb(&sblock, blk), block, bytes) <= 0) { + if (bread(&disk, fsbtodb(&sblock, blk), &block, bytes) <= 0) { warn("Failed to read dir block"); return (-1); } for (off = 0; off < bytes; off += dp->d_reclen) { - dp = (struct direct *)(uintptr_t)&block[off]; + assert(off % alignof(struct direct) == 0); + dp = (struct direct *)(uintptr_t)(block.buf + off); if (dp->d_reclen == 0) break; if (dp->d_ino == 0) @@ -712,12 +720,13 @@ journal_findfile(void) } static void -dir_clear_block(const char *block, off_t off) +dir_clear_block(dirblock *block, off_t off) { struct direct *dp; for (; off < sblock.fs_bsize; off += DIRBLKSIZ) { - dp = (struct direct *)(uintptr_t)&block[off]; + assert(off % alignof(struct direct) == 0); + dp = (struct direct *)(uintptr_t)(block->buf + off); dp->d_ino = 0; dp->d_reclen = DIRBLKSIZ; dp->d_type = DT_UNKNOWN; @@ -733,21 +742,23 @@ static int dir_insert(ufs2_daddr_t blk, off_t off, ino_t ino) { struct direct *dp; - char block[MAXBSIZE]; + dirblock block; - if (bread(&disk, fsbtodb(&sblock, blk), block, sblock.fs_bsize) <= 0) { + assert((size_t)sblock.fs_bsize <= sizeof(block)); + if (bread(&disk, fsbtodb(&sblock, blk), &block, sblock.fs_bsize) <= 0) { warn("Failed to read dir block"); return (-1); } - bzero(&block[off], sblock.fs_bsize - off); - dp = (struct direct *)(uintptr_t)&block[off]; + assert(off % alignof(struct direct) == 0); + bzero(block.buf + off, sblock.fs_bsize - off); + dp = (struct direct *)(uintptr_t)(block.buf + off); dp->d_ino = ino; dp->d_reclen = DIRBLKSIZ; dp->d_type = DT_REG; dp->d_namlen = strlen(SUJ_FILE); bcopy(SUJ_FILE, &dp->d_name, strlen(SUJ_FILE)); - dir_clear_block(block, off + DIRBLKSIZ); - if (bwrite(&disk, fsbtodb(&sblock, blk), block, sblock.fs_bsize) <= 0) { + dir_clear_block(&block, off + DIRBLKSIZ); + if (bwrite(&disk, fsbtodb(&sblock, blk), &block, sblock.fs_bsize) <= 0) { warn("Failed to write dir block"); return (-1); } @@ -761,15 +772,16 @@ dir_insert(ufs2_daddr_t blk, off_t off, ino_t ino) static int dir_extend(ufs2_daddr_t blk, ufs2_daddr_t nblk, off_t size, ino_t ino) { - char block[MAXBSIZE]; + dirblock block; - if (bread(&disk, fsbtodb(&sblock, blk), block, + assert((size_t)sblock.fs_bsize <= sizeof(block)); + if (bread(&disk, fsbtodb(&sblock, blk), &block, roundup(size, sblock.fs_fsize)) <= 0) { warn("Failed to read dir block"); return (-1); } - dir_clear_block(block, size); - if (bwrite(&disk, fsbtodb(&sblock, nblk), block, sblock.fs_bsize) + dir_clear_block(&block, size); + if (bwrite(&disk, fsbtodb(&sblock, nblk), &block, sblock.fs_bsize) <= 0) { warn("Failed to write dir block"); return (-1); @@ -858,19 +870,17 @@ journal_insertfile(ino_t ino) static int indir_fill(ufs2_daddr_t blk, int level, int *resid) { - char indirbuf[MAXBSIZE]; - ufs1_daddr_t *bap1; - ufs2_daddr_t *bap2; + union { + char buf[MAXBSIZE]; + ufs1_daddr_t ufs1; + ufs2_daddr_t ufs2; + } indir = { 0 }; + ufs1_daddr_t *bap1 = &indir.ufs1; + ufs2_daddr_t *bap2 = &indir.ufs2; ufs2_daddr_t nblk; - int ncnt; - int cnt; - int i; + int cnt = 0, ncnt; - bzero(indirbuf, sizeof(indirbuf)); - bap1 = (ufs1_daddr_t *)(uintptr_t)indirbuf; - bap2 = (void *)bap1; - cnt = 0; - for (i = 0; i < NINDIR(&sblock) && *resid != 0; i++) { + for (int i = 0; i < NINDIR(&sblock) && *resid != 0; i++) { nblk = journal_balloc(); if (nblk <= 0) return (-1); @@ -887,7 +897,7 @@ indir_fill(ufs2_daddr_t blk, int level, int *resid) } else (*resid)--; } - if (bwrite(&disk, fsbtodb(&sblock, blk), indirbuf, + if (bwrite(&disk, fsbtodb(&sblock, blk), indir.buf, sblock.fs_bsize) <= 0) { warn("Failed to write indirect"); return (-1);