From nobody Sun Feb 27 01:35:17 2022 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 D969519EBF43; Sun, 27 Feb 2022 01:35:17 +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 4K5mKd5lYCz3n3R; Sun, 27 Feb 2022 01:35:17 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1645925717; 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=wG1KiVMAn9b1htfnHWyW3mFqnIabKkda+6Wex8Qy6wo=; b=Hf2GAZnQ12eXpT7r21IH6cEKWgeXra+s6d/2M3lfWHulKAi4Iujp+c8ri0YVdUy69h4aO8 HwVHpSdDbOPMsfjUXt/JHpIvy3V3eYgC/wQbheUDt0PYkgTKj2maCUJe81J8s2N6Z1qHLv cICGyKF7WD1HHr1Z94LkUFXWaQY2cVxva/JLR/J+sksT+yofz97H45nUYEoAIzYIwUvtbq FatZ7El+6Ogk8mKBPhfO+Q371ddOpSgzf2Vfi6WOpjm+BryUkhe4sZNHtm6k0ovlNyM6ZL v41k14LzkbRohi6JGJB3vLWtKovUSd9ZWitnsDydkI2l2323TAwOq9n7KZyYUg== 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 A52D01E4F8; Sun, 27 Feb 2022 01:35:17 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 21R1ZHdw017353; Sun, 27 Feb 2022 01:35:17 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 21R1ZHTO017352; Sun, 27 Feb 2022 01:35:17 GMT (envelope-from git) Date: Sun, 27 Feb 2022 01:35:17 GMT Message-Id: <202202270135.21R1ZHTO017352@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Kirk McKusick Subject: git: 5628a0901987 - stable/13 - Avoid unaligned writes by fsck_ffs(8). 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: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mckusick X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 5628a0901987c5f72403cf69e23701f4cc7bc2e2 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1645925717; 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=wG1KiVMAn9b1htfnHWyW3mFqnIabKkda+6Wex8Qy6wo=; b=E9s1wqtsch8j3cBUPI1137vXeF3XgNGGMoWHgS0uwdh3EUMXFpG9MVn/EemAZR0djJlBvd DLwGmj5rX+rCmug+pKrAa0Z+ED6rFZ68Y0pACZnitp3laeamJrNwgaBZg1zAIb/OdQizfm i8c7vIkvBIlD5m9e8n3IeudrdmISF3272Ue2G0qOPfLPr37BOx3NKuvq73mEfmlC2P4T7c 662Vr1hsl+ZJisd7kmEGmKsI0wP4gFP92F6VtGqoD2U+DW4sxOiXIoHoGjs2IoBnm4tMIz zwH9LjrzD3V0+TV42zcdR6YvEThz9xN8vCrWKnvBwSNQ0+Co+Q10Jvy63Y/Hig== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1645925717; a=rsa-sha256; cv=none; b=uH+2jrOn8FucTxKAFu/uVc/G07RLIWVFLu+8ofu3CVbI3bHj5LgHApC3mHyGiPFvp02QMw L+5m2ABfFa09dzDn8NFp+pBCyxPi4HcKvPilndWOjXmIaGvypYCItLhVwEpNshOoGF4PcQ sRxjzn+IouluqhGl7M+thJkKZrN9d8kf+L4Kk+dTrR8JwHAw81ypYEnuFRMZKB9a9mrGCm qQx7+H+1nenFUgOhjw2DXQlREYQEFyUWYsXddG+ESEwSXYz2tpC8yVkgGskutqZwwLVaSX chPEAP0hd0UYXymz23tp994qhWb6fF03NLNFBaM9/Hokq194binM4Ug3nsk4dQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by mckusick: URL: https://cgit.FreeBSD.org/src/commit/?id=5628a0901987c5f72403cf69e23701f4cc7bc2e2 commit 5628a0901987c5f72403cf69e23701f4cc7bc2e2 Author: Kirk McKusick AuthorDate: 2022-02-20 21:18:05 +0000 Commit: Kirk McKusick CommitDate: 2022-02-26 21:34:11 +0000 Avoid unaligned writes by fsck_ffs(8). (cherry picked from commit 7a1c1f6a0332c5b60349a5df0e3ce64e5005b2ff) --- sbin/fsck_ffs/setup.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/sbin/fsck_ffs/setup.c b/sbin/fsck_ffs/setup.c index 87676e8ca7ce..375ba897199a 100644 --- a/sbin/fsck_ffs/setup.c +++ b/sbin/fsck_ffs/setup.c @@ -399,17 +399,19 @@ chkrecovery(int devfd) { struct fsrecovery *fsr; char *fsrbuf; - u_int secsize; + u_int secsize, rdsize; /* * Could not determine if backup material exists, so do not * offer to create it. */ fsrbuf = NULL; + rdsize = sblock.fs_fsize; if (ioctl(devfd, DIOCGSECTORSIZE, &secsize) == -1 || - (fsrbuf = Malloc(secsize)) == NULL || - blread(devfd, fsrbuf, (SBLOCK_UFS2 - secsize) / dev_bsize, - secsize) != 0) { + rdsize % secsize != 0 || + (fsrbuf = Malloc(rdsize)) == NULL || + blread(devfd, fsrbuf, (SBLOCK_UFS2 - rdsize) / dev_bsize, + rdsize) != 0) { free(fsrbuf); return (1); } @@ -417,7 +419,7 @@ chkrecovery(int devfd) * Recovery material has already been created, so do not * need to create it again. */ - fsr = (struct fsrecovery *)&fsrbuf[secsize - sizeof *fsr]; + fsr = (struct fsrecovery *)&fsrbuf[rdsize - sizeof *fsr]; if (fsr->fsr_magic == FS_UFS2_MAGIC) { free(fsrbuf); return (1); @@ -430,8 +432,8 @@ chkrecovery(int devfd) } /* - * Read the last sector of the boot block, replace the last - * 20 bytes with the recovery information, then write it back. + * Read the last filesystem-size piece of the boot block, replace the + * last 20 bytes with the recovery information, then write it back. * The recovery information only works for UFS2 filesystems. */ static void @@ -439,24 +441,26 @@ saverecovery(int readfd, int writefd) { struct fsrecovery *fsr; char *fsrbuf; - u_int secsize; + u_int secsize, rdsize; fsrbuf = NULL; + rdsize = sblock.fs_fsize; if (sblock.fs_magic != FS_UFS2_MAGIC || ioctl(readfd, DIOCGSECTORSIZE, &secsize) == -1 || - (fsrbuf = Malloc(secsize)) == NULL || - blread(readfd, fsrbuf, (SBLOCK_UFS2 - secsize) / dev_bsize, - secsize) != 0) { + rdsize % secsize != 0 || + (fsrbuf = Malloc(rdsize)) == NULL || + blread(readfd, fsrbuf, (SBLOCK_UFS2 - rdsize) / dev_bsize, + rdsize) != 0) { printf("RECOVERY DATA COULD NOT BE CREATED\n"); free(fsrbuf); return; } - fsr = (struct fsrecovery *)&fsrbuf[secsize - sizeof *fsr]; + fsr = (struct fsrecovery *)&fsrbuf[rdsize - sizeof *fsr]; fsr->fsr_magic = sblock.fs_magic; fsr->fsr_fpg = sblock.fs_fpg; fsr->fsr_fsbtodb = sblock.fs_fsbtodb; fsr->fsr_sblkno = sblock.fs_sblkno; fsr->fsr_ncg = sblock.fs_ncg; - blwrite(writefd, fsrbuf, (SBLOCK_UFS2 - secsize) / secsize, secsize); + blwrite(writefd, fsrbuf, (SBLOCK_UFS2 - rdsize) / dev_bsize, rdsize); free(fsrbuf); }