From nobody Fri Sep 12 00:31:57 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B7DA6C4167B for ; Wed, 6 Dec 2023 15:14:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1442469AbjLFPOP (ORCPT ); Wed, 6 Dec 2023 10:14:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46192 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379244AbjLFPOK (ORCPT ); Wed, 6 Dec 2023 10:14:10 -0500 Received: from relayaws-01.paragon-software.com (relayaws-01.paragon-software.com [35.157.23.187]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2355DD64; Wed, 6 Dec 2023 07:14:16 -0800 (PST) Received: from relayfre-01.paragon-software.com (unknown [172.30.72.12]) by relayaws-01.paragon-software.com (Postfix) with ESMTPS id DCC301D47; Wed, 6 Dec 2023 15:02:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1701874953; bh=h7CldxQv2S5Mzb+cgzMS8C/4d3oWIhrtzyaVf9z57fs=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=FtCj3ZeRaBPZiv12dqOADExR+OT9YeqY3/k6OC2QQKJ9fE5ai7DN/5guAiwZgrx0Y jzP8+1cDoiXU1I2OILGI8oMrFGQ8Mzot78sQq7PJSr+NK9SifuC9zxxEqJPwFMUUQW 5WoniFgJM0xApmStxoud0SP6WIR1lmABVdHpzCw8= Received: from dlg2.mail.paragon-software.com (vdlg-exch-02.paragon-software.com [172.30.1.105]) by relayfre-01.paragon-software.com (Postfix) with ESMTPS id 243202117; Wed, 6 Dec 2023 15:08:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1701875337; bh=h7CldxQv2S5Mzb+cgzMS8C/4d3oWIhrtzyaVf9z57fs=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=eyslm8PSDjgl/rJxNS7F5ffPQA97GTxlXUWYf2oWGY5RTCsYMvvFyqCsElJpRYSwz 6npCQYykuV9udtf+8QOPyVk307zBuOQjVyLCP2+qixg9ZdLjMW9bmjegmNrIfmBVN8 0V/6teX8F6muUqbGlKbZHgFBNOh1lspt8A1CwIIE= Received: from [172.16.192.129] (192.168.211.144) by vdlg-exch-02.paragon-software.com (172.30.1.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.7; Wed, 6 Dec 2023 18:08:56 +0300 Message-ID: <53c3c86f-c816-4747-9262-592c3ddc6660@paragon-software.com> Date: Wed, 6 Dec 2023 18:08:56 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 01/16] fs/ntfs3: Improve alternative boot processing Content-Language: en-US From: Konstantin Komarovc To: CC: , References: <00fd1558-fda5-421b-be43-7de69e32cb4e@paragon-software.com> In-Reply-To: <00fd1558-fda5-421b-be43-7de69e32cb4e@paragon-software.com> Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [192.168.211.144] X-ClientProxiedBy: vobn-exch-01.paragon-software.com (172.30.72.13) To vdlg-exch-02.paragon-software.com (172.30.1.105) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Signed-off-by: Konstantin Komarov --- =C2=A0fs/ntfs3/super.c | 35 +++++++++++++++++------------------ =C2=A01 file changed, 17 insertions(+), 18 deletions(-) diff --git a/fs/ntfs3/super.c b/fs/ntfs3/super.c index 9153dffde950..09d61c6c90aa 100644 --- a/fs/ntfs3/super.c +++ b/fs/ntfs3/super.c @@ -866,6 +866,7 @@ static int ntfs_init_from_boot(struct super_block=20 *sb, u32 sector_size, =C2=A0=C2=A0=C2=A0 =C2=A0u16 fn, ao; =C2=A0=C2=A0=C2=A0 =C2=A0u8 cluster_bits; =C2=A0=C2=A0=C2=A0 =C2=A0u32 boot_off =3D 0; +=C2=A0=C2=A0 =C2=A0sector_t boot_block =3D 0; =C2=A0=C2=A0=C2=A0 =C2=A0const char *hint =3D "Primary boot"; =C2=A0=C2=A0=C2=A0 =C2=A0/* Save original dev_size. Used with alternative = boot. */ @@ -873,11 +874,11 @@ static int ntfs_init_from_boot(struct super_block=20 *sb, u32 sector_size, =C2=A0=C2=A0=C2=A0 =C2=A0sbi->volume.blocks =3D dev_size >> PAGE_SHIFT; -=C2=A0=C2=A0 =C2=A0bh =3D ntfs_bread(sb, 0); +read_boot: +=C2=A0=C2=A0 =C2=A0bh =3D ntfs_bread(sb, boot_block); =C2=A0=C2=A0=C2=A0 =C2=A0if (!bh) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return -EIO; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return boot_block ? -EINVAL : -EIO; -check_boot: =C2=A0=C2=A0=C2=A0 =C2=A0err =3D -EINVAL; =C2=A0=C2=A0=C2=A0 =C2=A0/* Corrupted image; do not read OOB */ @@ -1108,26 +1109,24 @@ static int ntfs_init_from_boot(struct=20 super_block *sb, u32 sector_size, =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0out: -=C2=A0=C2=A0 =C2=A0if (err =3D=3D -EINVAL && !bh->b_blocknr && dev_size0 >= PAGE_SHIFT) { +=C2=A0=C2=A0 =C2=A0brelse(bh); + +=C2=A0=C2=A0 =C2=A0if (err =3D=3D -EINVAL && !boot_block && dev_size0 > PA= GE_SHIFT) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0u32 block_size =3D min_t(u32, = sector_size, PAGE_SIZE); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0u64 lbo =3D dev_size0 - sizeof= (*boot); -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0/* -=C2=A0=C2=A0 =C2=A0 =C2=A0=C2=A0 =C2=A0 * Try alternative boot (last secto= r) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0 */ -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0brelse(bh); - -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0sb_set_blocksize(sb, block_size); -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0bh =3D ntfs_bread(sb, lbo >> blksize= _bits(block_size)); -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (!bh) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return -EINVAL; - +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0boot_block =3D lbo >> blksize_bits(b= lock_size); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0boot_off =3D lbo & (block_size= - 1); -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0hint =3D "Alternative boot"; -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0dev_size =3D dev_size0; /* restore o= riginal size. */ -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto check_boot; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (boot_block && block_size >=3D bo= ot_off + sizeof(*boot)) { +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0/* +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0 * Try alternativ= e boot (last sector) +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0 */ +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0sb_set_blocksize(= sb, block_size); +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0hint =3D "Alterna= tive boot"; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0dev_size =3D dev_= size0; /* restore original size. */ +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto read_boot; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0} -=C2=A0=C2=A0 =C2=A0brelse(bh); =C2=A0=C2=A0=C2=A0 =C2=A0return err; =C2=A0} --=20 2.34.1