From nobody Wed Dec 24 08:05:10 2025 Received: from relayaws-01.paragon-software.com (relayaws-01.paragon-software.com [35.157.23.187]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CC22C537E4; Mon, 29 Jan 2024 08:07:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=35.157.23.187 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706515654; cv=none; b=Yy5ADQkFG8/J4WvD9QxVJd+bVQt7b85Yi+P9m7kp7c5PSd3zBa9q7GG5YIo+97q7mvf7Dg0s3glQzQ7GJHIQPDY2K/GIYO8Lw60ntxzQ4b7Iarx/I6+nCjtZS8tRJczUrESEXc1IDteDObGNCAOu6589LnUSsbz8IslN4do2Yvk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706515654; c=relaxed/simple; bh=ebmE+3+S0pyuODXXnBFsAaOW8KZdxmR2O/v1cJbjSO4=; h=Message-ID:Date:MIME-Version:Subject:From:To:CC:References: In-Reply-To:Content-Type; b=FWxT1FbR2DkjL75FmaP6cR/1kVVcJrTqCjP8+7N1A+pRvoHlMHsOHEJxTj7NCYA23n6tZeGcbeb3f4XU5PyCliTzO+J5F1GoV7reDCv6SgXegfVnTpjyHrZoqYZ+naW8BkprqphZWgRSyNN0EtiHMzgjjWp1VZuUjRavnWTy2ZM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=paragon-software.com; spf=pass smtp.mailfrom=paragon-software.com; dkim=pass (1024-bit key) header.d=paragon-software.com header.i=@paragon-software.com header.b=u6Vv7kMM; dkim=pass (1024-bit key) header.d=paragon-software.com header.i=@paragon-software.com header.b=Wtto7Qtd; arc=none smtp.client-ip=35.157.23.187 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=paragon-software.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=paragon-software.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=paragon-software.com header.i=@paragon-software.com header.b="u6Vv7kMM"; dkim=pass (1024-bit key) header.d=paragon-software.com header.i=@paragon-software.com header.b="Wtto7Qtd" Received: from relayfre-01.paragon-software.com (unknown [172.30.72.12]) by relayaws-01.paragon-software.com (Postfix) with ESMTPS id 7FDD4211A; Mon, 29 Jan 2024 08:00:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1706515239; bh=SelnU1PmjcEBam/XFIeYfnjb/zVT85VEHjJYVt2fRhM=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=u6Vv7kMMhVrF1vzHeBcbgCVN50yqGtaSjYEW8ON03Jpi9XNbYJTXzaxT3SL7XzqkR 6cVEFcLHJqpCZPwiKlGjpz4nt/DQ35sChxYkSuds3Mglu5URBYpWvpL+eCJTyNUdyU PwK2jkF7UHG1AxfabfmC4+8rZX4YlrHvxS8NDj4A= 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 CD4702135; Mon, 29 Jan 2024 08:07:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1706515649; bh=SelnU1PmjcEBam/XFIeYfnjb/zVT85VEHjJYVt2fRhM=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=Wtto7QtdPRPmS/B/yMBSisnCRJ6+b1ajjrp4oEe6VyxUX0X4ZSj8qrypAZAtWHZj9 lYzyzKoRORuHV0Debb33xTzi+KuDmwW4b2O3si54WDc+C+3enMK+RyZdkLoaGZNKuK ZTtdTn5ydRwrRNARy+ocBiKd+dGUC7ujq+i7Y2SQ= Received: from [192.168.211.199] (192.168.211.199) 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; Mon, 29 Jan 2024 11:07:29 +0300 Message-ID: <7d42dc06-2f7f-40b4-8d9f-89eebd0a8f06@paragon-software.com> Date: Mon, 29 Jan 2024 11:07:29 +0300 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 1/5] fs/ntfs3: Prevent generic message "attempt to access beyond end of device" Content-Language: en-US From: Konstantin Komarov To: CC: , References: In-Reply-To: Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: vobn-exch-01.paragon-software.com (172.30.72.13) To vdlg-exch-02.paragon-software.com (172.30.1.105) It used in test environment. Signed-off-by: Konstantin Komarov --- =C2=A0fs/ntfs3/fsntfs.c=C2=A0 | 24 ++++++++++++++++++++++++ =C2=A0fs/ntfs3/ntfs_fs.h | 14 +------------- =C2=A02 files changed, 25 insertions(+), 13 deletions(-) diff --git a/fs/ntfs3/fsntfs.c b/fs/ntfs3/fsntfs.c index 321978019407..ae2ef5c11868 100644 --- a/fs/ntfs3/fsntfs.c +++ b/fs/ntfs3/fsntfs.c @@ -1007,6 +1007,30 @@ static inline __le32 security_hash(const void=20 *sd, size_t bytes) =C2=A0=C2=A0=C2=A0 =C2=A0return cpu_to_le32(hash); =C2=A0} +/* + * simple wrapper for sb_bread_unmovable. + */ +struct buffer_head *ntfs_bread(struct super_block *sb, sector_t block) +{ +=C2=A0=C2=A0 =C2=A0struct ntfs_sb_info *sbi =3D sb->s_fs_info; +=C2=A0=C2=A0 =C2=A0struct buffer_head *bh; + +=C2=A0=C2=A0 =C2=A0if (unlikely(block >=3D sbi->volume.blocks)) { +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0/* prevent generic message "attempt = to access beyond end of=20 device" */ +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ntfs_err(sb, "try to read out of vol= ume at offset 0x%llx", +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0 (u64)block << sb= ->s_blocksize_bits); +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return NULL; +=C2=A0=C2=A0 =C2=A0} + +=C2=A0=C2=A0 =C2=A0bh =3D sb_bread_unmovable(sb, block); +=C2=A0=C2=A0 =C2=A0if (bh) +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return bh; + +=C2=A0=C2=A0 =C2=A0ntfs_err(sb, "failed to read volume at offset 0x%llx", +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0 (u64)block << sb->s_blocksize_bits); +=C2=A0=C2=A0 =C2=A0return NULL; +} + =C2=A0int ntfs_sb_read(struct super_block *sb, u64 lbo, size_t bytes, void=20 *buffer) =C2=A0{ =C2=A0=C2=A0=C2=A0 =C2=A0struct block_device *bdev =3D sb->s_bdev; diff --git a/fs/ntfs3/ntfs_fs.h b/fs/ntfs3/ntfs_fs.h index 2b54ae94440f..81f7563428ee 100644 --- a/fs/ntfs3/ntfs_fs.h +++ b/fs/ntfs3/ntfs_fs.h @@ -586,6 +586,7 @@ bool check_index_header(const struct INDEX_HDR *hdr,=20 size_t bytes); =C2=A0int log_replay(struct ntfs_inode *ni, bool *initialized); =C2=A0/* Globals from fsntfs.c */ +struct buffer_head *ntfs_bread(struct super_block *sb, sector_t block); =C2=A0bool ntfs_fix_pre_write(struct NTFS_RECORD_HEADER *rhdr, size_t byte= s); =C2=A0int ntfs_fix_post_read(struct NTFS_RECORD_HEADER *rhdr, size_t bytes, =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 bool simple); @@ -1032,19 +1033,6 @@ static inline u64 bytes_to_block(const struct=20 super_block *sb, u64 size) =C2=A0=C2=A0=C2=A0 =C2=A0return (size + sb->s_blocksize - 1) >> sb->s_bloc= ksize_bits; =C2=A0} -static inline struct buffer_head *ntfs_bread(struct super_block *sb, -=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=C2=A0 sector_t block) -{ -=C2=A0=C2=A0 =C2=A0struct buffer_head *bh =3D sb_bread_unmovable(sb, block= ); - -=C2=A0=C2=A0 =C2=A0if (bh) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return bh; - -=C2=A0=C2=A0 =C2=A0ntfs_err(sb, "failed to read volume at offset 0x%llx", -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0 (u64)block << sb->s_blocksize_bits); -=C2=A0=C2=A0 =C2=A0return NULL; -} - =C2=A0static inline struct ntfs_inode *ntfs_i(struct inode *inode) =C2=A0{ =C2=A0=C2=A0=C2=A0 =C2=A0return container_of(inode, struct ntfs_inode, vfs= _inode); --=20 2.34.1 From nobody Wed Dec 24 08:05:10 2025 Received: from relayaws-01.paragon-software.com (relayaws-01.paragon-software.com [35.157.23.187]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C743D53E02; Mon, 29 Jan 2024 08:08:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=35.157.23.187 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706515687; cv=none; b=KXDAf09ivpm4ZgW08+QoGjs6cRkviqiYrM8uxQAax6EBaXz2J+KkqFhIHFQKUqw5IitYTgm3v1M+PskKtAVmawNlKFXkHA7DpypZbEzuq3E63QfHZCM2IkWCW3vS6VmIT5sw9jKW0ztaS9sexCuvdFxxOm0wRhkl7YphtAoTAko= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706515687; c=relaxed/simple; bh=pNUWJLC16kaMVAE5WhZN3NaYZlEojCmbVSdRqnHrhnw=; h=Message-ID:Date:MIME-Version:Subject:From:To:CC:References: In-Reply-To:Content-Type; b=HnERL2q6nms0vKjD0jVS+dnAAeKYPaU3SAqBW9XlWP5r8ViKq713ez3i0DeVJ4Yk3+3bGfIWulrxhuNVAFAOQ5j3YzWVRRFhNzbza+cOCYMr+WJnXZ/UsKfJnxAs8FfQKY+e+Ocq5qPngkc/6HXl/7mgGu2QpCUuYavjknzxs7E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=paragon-software.com; spf=pass smtp.mailfrom=paragon-software.com; dkim=pass (1024-bit key) header.d=paragon-software.com header.i=@paragon-software.com header.b=tJcaLeFF; dkim=pass (1024-bit key) header.d=paragon-software.com header.i=@paragon-software.com header.b=kcu/vikB; arc=none smtp.client-ip=35.157.23.187 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=paragon-software.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=paragon-software.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=paragon-software.com header.i=@paragon-software.com header.b="tJcaLeFF"; dkim=pass (1024-bit key) header.d=paragon-software.com header.i=@paragon-software.com header.b="kcu/vikB" Received: from relayfre-01.paragon-software.com (unknown [172.30.72.12]) by relayaws-01.paragon-software.com (Postfix) with ESMTPS id 83C70211A; Mon, 29 Jan 2024 08:01:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1706515271; bh=chi2nY9wvqimOanOPJ924vEM3xM63w6P1XRw2v6gYFk=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=tJcaLeFFp9u+SJjkx6v3cXKW00jKI2GE3PLAUnzWa7osSY3/61blJwoqDuCec29JW fCfPd5/dSQWNFrnEX26qQ8jouwWLhd/QPuLtWj6deXl8g0cddxUzMAd/hWDfBGgp6N nQSatgM03mfgrnxmKiy0VI6YbMyxLF8F9aYP2VU8= 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 CEF771D33; Mon, 29 Jan 2024 08:08:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1706515681; bh=chi2nY9wvqimOanOPJ924vEM3xM63w6P1XRw2v6gYFk=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=kcu/vikBsl5uPk/768daBudBH+s021A47Uz8SUBWuWSS9X4EJhQecPXwaK5tFJp40 0ST1HYQgl9yIgA0JI3HNAPHSO+VkQLU3M85+XgyBNJ7G44bf66baMNXYdZUfMFbtbX duJlJ+Lnivnt0NlJdxIm8dBb2OVECOgZF1zWSTww= Received: from [192.168.211.199] (192.168.211.199) 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; Mon, 29 Jan 2024 11:08:01 +0300 Message-ID: <5be49112-9f60-4091-97f8-b9a6d0aeee4c@paragon-software.com> Date: Mon, 29 Jan 2024 11:08:01 +0300 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 2/5] fs/ntfs3: Use i_size_read and i_size_write Content-Language: en-US From: Konstantin Komarov To: CC: , References: In-Reply-To: Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: vobn-exch-01.paragon-software.com (172.30.72.13) To vdlg-exch-02.paragon-software.com (172.30.1.105) Signed-off-by: Konstantin Komarov --- =C2=A0fs/ntfs3/attrib.c=C2=A0 |=C2=A0 4 ++-- =C2=A0fs/ntfs3/dir.c=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 2 +- =C2=A0fs/ntfs3/file.c=C2=A0=C2=A0=C2=A0 | 11 ++++++----- =C2=A0fs/ntfs3/frecord.c | 10 +++++----- =C2=A0fs/ntfs3/index.c=C2=A0=C2=A0 |=C2=A0 8 ++++---- =C2=A0fs/ntfs3/inode.c=C2=A0=C2=A0 |=C2=A0 2 +- =C2=A06 files changed, 19 insertions(+), 18 deletions(-) diff --git a/fs/ntfs3/attrib.c b/fs/ntfs3/attrib.c index 646e2dad1b75..7aadf5010999 100644 --- a/fs/ntfs3/attrib.c +++ b/fs/ntfs3/attrib.c @@ -2084,7 +2084,7 @@ int attr_collapse_range(struct ntfs_inode *ni, u64=20 vbo, u64 bytes) =C2=A0=C2=A0=C2=A0 =C2=A0/* Update inode size. */ =C2=A0=C2=A0=C2=A0 =C2=A0ni->i_valid =3D valid_size; -=C2=A0=C2=A0 =C2=A0ni->vfs_inode.i_size =3D data_size; +=C2=A0=C2=A0 =C2=A0i_size_write(&ni->vfs_inode, data_size); =C2=A0=C2=A0=C2=A0 =C2=A0inode_set_bytes(&ni->vfs_inode, total_size); =C2=A0=C2=A0=C2=A0 =C2=A0ni->ni_flags |=3D NI_FLAG_UPDATE_PARENT; =C2=A0=C2=A0=C2=A0 =C2=A0mark_inode_dirty(&ni->vfs_inode); @@ -2499,7 +2499,7 @@ int attr_insert_range(struct ntfs_inode *ni, u64=20 vbo, u64 bytes) =C2=A0=C2=A0=C2=A0 =C2=A0mi_b->dirty =3D true; =C2=A0done: -=C2=A0=C2=A0 =C2=A0ni->vfs_inode.i_size +=3D bytes; +=C2=A0=C2=A0 =C2=A0i_size_write(&ni->vfs_inode, ni->vfs_inode.i_size + byt= es); =C2=A0=C2=A0=C2=A0 =C2=A0ni->ni_flags |=3D NI_FLAG_UPDATE_PARENT; =C2=A0=C2=A0=C2=A0 =C2=A0mark_inode_dirty(&ni->vfs_inode); diff --git a/fs/ntfs3/dir.c b/fs/ntfs3/dir.c index 9f6dd445eb04..effa6accf8a8 100644 --- a/fs/ntfs3/dir.c +++ b/fs/ntfs3/dir.c @@ -517,7 +517,7 @@ static int ntfs_dir_count(struct inode *dir, bool=20 *is_empty, size_t *dirs, =C2=A0=C2=A0=C2=A0 =C2=A0u32 e_size, off, end; =C2=A0=C2=A0=C2=A0 =C2=A0size_t drs =3D 0, fles =3D 0, bit =3D 0; =C2=A0=C2=A0=C2=A0 =C2=A0struct indx_node *node =3D NULL; -=C2=A0=C2=A0 =C2=A0size_t max_indx =3D ni->vfs_inode.i_size >> ni->dir.ind= ex_bits; +=C2=A0=C2=A0 =C2=A0size_t max_indx =3D i_size_read(&ni->vfs_inode) >> ni->= dir.index_bits; =C2=A0=C2=A0=C2=A0 =C2=A0if (is_empty) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0*is_empty =3D true; diff --git a/fs/ntfs3/file.c b/fs/ntfs3/file.c index 07ed3d946e7c..b702543a8795 100644 --- a/fs/ntfs3/file.c +++ b/fs/ntfs3/file.c @@ -646,7 +646,7 @@ static long ntfs_fallocate(struct file *file, int=20 mode, loff_t vbo, loff_t len) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (err) =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=A0goto out; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0} else if (new_size > i_size) { -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0inode->i_size =3D= new_size; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0i_size_write(inod= e, new_size); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0} @@ -696,7 +696,7 @@ int ntfs3_setattr(struct mnt_idmap *idmap, struct=20 dentry *dentry, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out; =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=A0inode_dio_wait(inode); -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0oldsize =3D inode->i_size; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0oldsize =3D i_size_read(inode); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0newsize =3D attr->ia_size; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (newsize <=3D oldsize) @@ -708,7 +708,7 @@ int ntfs3_setattr(struct mnt_idmap *idmap, struct=20 dentry *dentry, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ni->ni_flags |=3D NI_FLAG_UPDA= TE_PARENT; -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0inode->i_size =3D newsize; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0i_size_write(inode, newsize); =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0setattr_copy(idmap, inode, attr); @@ -847,7 +847,7 @@ static ssize_t ntfs_compress_write(struct kiocb=20 *iocb, struct iov_iter *from) =C2=A0=C2=A0=C2=A0 =C2=A0size_t count =3D iov_iter_count(from); =C2=A0=C2=A0=C2=A0 =C2=A0loff_t pos =3D iocb->ki_pos; =C2=A0=C2=A0=C2=A0 =C2=A0struct inode *inode =3D file_inode(file); -=C2=A0=C2=A0 =C2=A0loff_t i_size =3D inode->i_size; +=C2=A0=C2=A0 =C2=A0loff_t i_size =3D i_size_read(inode); =C2=A0=C2=A0=C2=A0 =C2=A0struct address_space *mapping =3D inode->i_mappin= g; =C2=A0=C2=A0=C2=A0 =C2=A0struct ntfs_inode *ni =3D ntfs_i(inode); =C2=A0=C2=A0=C2=A0 =C2=A0u64 valid =3D ni->i_valid; @@ -1177,7 +1177,8 @@ static int ntfs_file_release(struct inode *inode,=20 struct file *file) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0down_write(&ni->file.run_lock); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0err =3D attr_set_size(ni, ATTR= _DATA, NULL, 0, &ni->file.run, -=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 inode->i_size, &ni->i_valid, false, NULL); +=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 i_size_read(inode), &ni->i_valid, false, +=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 NULL); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0up_write(&ni->file.run_lock); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ni_unlock(ni); diff --git a/fs/ntfs3/frecord.c b/fs/ntfs3/frecord.c index 2636ab7640ac..3b42938a9d3b 100644 --- a/fs/ntfs3/frecord.c +++ b/fs/ntfs3/frecord.c @@ -2099,7 +2099,7 @@ int ni_readpage_cmpr(struct ntfs_inode *ni, struct=20 page *page) =C2=A0=C2=A0=C2=A0 =C2=A0gfp_t gfp_mask; =C2=A0=C2=A0=C2=A0 =C2=A0struct page *pg; -=C2=A0=C2=A0 =C2=A0if (vbo >=3D ni->vfs_inode.i_size) { +=C2=A0=C2=A0 =C2=A0if (vbo >=3D i_size_read(&ni->vfs_inode)) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0SetPageUptodate(page); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0err =3D 0; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out; @@ -2173,7 +2173,7 @@ int ni_decompress_file(struct ntfs_inode *ni) =C2=A0{ =C2=A0=C2=A0=C2=A0 =C2=A0struct ntfs_sb_info *sbi =3D ni->mi.sbi; =C2=A0=C2=A0=C2=A0 =C2=A0struct inode *inode =3D &ni->vfs_inode; -=C2=A0=C2=A0 =C2=A0loff_t i_size =3D inode->i_size; +=C2=A0=C2=A0 =C2=A0loff_t i_size =3D i_size_read(inode); =C2=A0=C2=A0=C2=A0 =C2=A0struct address_space *mapping =3D inode->i_mappin= g; =C2=A0=C2=A0=C2=A0 =C2=A0gfp_t gfp_mask =3D mapping_gfp_mask(mapping); =C2=A0=C2=A0=C2=A0 =C2=A0struct page **pages =3D NULL; @@ -2457,6 +2457,7 @@ int ni_read_frame(struct ntfs_inode *ni, u64=20 frame_vbo, struct page **pages, =C2=A0=C2=A0=C2=A0 =C2=A0struct ATTR_LIST_ENTRY *le =3D NULL; =C2=A0=C2=A0=C2=A0 =C2=A0struct runs_tree *run =3D &ni->file.run; =C2=A0=C2=A0=C2=A0 =C2=A0u64 valid_size =3D ni->i_valid; +=C2=A0=C2=A0 =C2=A0loff_t i_size =3D i_size_read(&ni->vfs_inode); =C2=A0=C2=A0=C2=A0 =C2=A0u64 vbo_disk; =C2=A0=C2=A0=C2=A0 =C2=A0size_t unc_size; =C2=A0=C2=A0=C2=A0 =C2=A0u32 frame_size, i, npages_disk, ondisk_size; @@ -2548,7 +2549,7 @@ int ni_read_frame(struct ntfs_inode *ni, u64=20 frame_vbo, struct page **pages, =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=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0frames =3D (ni->vfs_inode.i_size - 1= ) >> frame_bits; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0frames =3D (i_size - 1) >> frame_bit= s; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0err =3D attr_wof_frame_info(ni= , attr, run, frame64, frames, =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 frame_bits, &ondisk_size, &vbo_data); @@ -2556,8 +2557,7 @@ int ni_read_frame(struct ntfs_inode *ni, u64=20 frame_vbo, struct page **pages, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out2; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (frame64 =3D=3D frames) { -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0unc_size =3D 1 + = ((ni->vfs_inode.i_size - 1) & -=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(frame_size - 1)); +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0unc_size =3D 1 + = ((i_size - 1) & (frame_size - 1)); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ondisk_size= =3D attr_size(attr) - vbo_data; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0} else { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0unc_size = =3D frame_size; diff --git a/fs/ntfs3/index.c b/fs/ntfs3/index.c index cf92b2433f7a..daabaad63aaf 100644 --- a/fs/ntfs3/index.c +++ b/fs/ntfs3/index.c @@ -1462,7 +1462,7 @@ static int indx_create_allocate(struct ntfs_index=20 *indx, struct ntfs_inode *ni, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out2; =C2=A0=C2=A0=C2=A0 =C2=A0if (in->name =3D=3D I30_NAME) { -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ni->vfs_inode.i_size =3D data_size; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0i_size_write(&ni->vfs_inode, data_si= ze); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0inode_set_bytes(&ni->vfs_inode= , alloc_size); =C2=A0=C2=A0=C2=A0 =C2=A0} @@ -1544,7 +1544,7 @@ static int indx_add_allocate(struct ntfs_index=20 *indx, struct ntfs_inode *ni, =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0if (in->name =3D=3D I30_NAME) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ni->vfs_inode.i_size =3D data_size; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0i_size_write(&ni->vfs_inode, data_si= ze); =C2=A0=C2=A0=C2=A0 =C2=A0*vbn =3D bit << indx->idx2vbn_bits; @@ -2090,7 +2090,7 @@ static int indx_shrink(struct ntfs_index *indx,=20 struct ntfs_inode *ni, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return err; =C2=A0=C2=A0=C2=A0 =C2=A0if (in->name =3D=3D I30_NAME) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ni->vfs_inode.i_size =3D new_data; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0i_size_write(&ni->vfs_inode, new_dat= a); =C2=A0=C2=A0=C2=A0 =C2=A0bpb =3D bitmap_size(bit); =C2=A0=C2=A0=C2=A0 =C2=A0if (bpb * 8 =3D=3D nbits) @@ -2576,7 +2576,7 @@ int indx_delete_entry(struct ntfs_index *indx,=20 struct ntfs_inode *ni, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0err =3D attr_set_size(ni, ATTR= _ALLOC, in->name, in->name_len, =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 &indx->alloc_run, 0, NULL, false, NULL); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (in->name =3D=3D I30_NAME) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ni->vfs_inode.i_s= ize =3D 0; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0i_size_write(&ni-= >vfs_inode, 0); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0err =3D ni_remove_attr(ni, ATT= R_ALLOC, in->name, in->name_len, =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 false, NULL); diff --git a/fs/ntfs3/inode.c b/fs/ntfs3/inode.c index 85452a6b1d40..eb7a8c9fba01 100644 --- a/fs/ntfs3/inode.c +++ b/fs/ntfs3/inode.c @@ -985,7 +985,7 @@ int ntfs_write_end(struct file *file, struct=20 address_space *mapping, loff_t pos, =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=A0if (pos + err > inode->i_size)= { -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0inode->i_size =3D= pos + err; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0i_size_write(inod= e, pos + err); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0dirty =3D t= rue; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0} --=20 2.34.1 From nobody Wed Dec 24 08:05:10 2025 Received: from relayaws-01.paragon-software.com (relayaws-01.paragon-software.com [35.157.23.187]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E7CC452F68; Mon, 29 Jan 2024 08:08:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=35.157.23.187 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706515726; cv=none; b=gdPIwPe3alltsMWueEij+nyqBmg86gzpfAcgNrrnYEKaALmWIy0FESGrdzv99b9bl9b1OmbnLrBISehfVfkauLIH2DuAiVzU3XcYUtfX//I+y8rE0HQkAOahnQwWryrOzeSGyVB+0u+pvXk3rKueSrVubVBSITV/qY95z2E1OG0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706515726; c=relaxed/simple; bh=eLCjjqfccU7QtD9Z/zPxtm6zfiWJea3+n+pEq5WYGg8=; h=Message-ID:Date:MIME-Version:Subject:From:To:CC:References: In-Reply-To:Content-Type; b=f0ypxJX1eSNWf6drQxwrc2DM7LJvGe8hMpqRgr3lakiyezuPxcSeYsZV6XP6MtjlN8T9rZ+1a/DNXjHNs4dITaMITWz+U1xAzUrputk6OwyGAcM0EkSRw0X7m47gUGTi2+w1bfx+8s94O3DWBFjxXmgEn74rmBVWSXdr1HwIoB8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=paragon-software.com; spf=pass smtp.mailfrom=paragon-software.com; dkim=pass (1024-bit key) header.d=paragon-software.com header.i=@paragon-software.com header.b=S74i0XWS; arc=none smtp.client-ip=35.157.23.187 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=paragon-software.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=paragon-software.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=paragon-software.com header.i=@paragon-software.com header.b="S74i0XWS" Received: from dlg2.mail.paragon-software.com (vdlg-exch-02.paragon-software.com [172.30.1.105]) by relayaws-01.paragon-software.com (Postfix) with ESMTPS id 91AA2211A; Mon, 29 Jan 2024 08:01:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1706515311; bh=xeznt+Dol1rUDewd0bVWo6D8uEqRIEtOxRwa5jeQ4+4=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=S74i0XWSIfRF+JVBnt337iayJpkT1ksrZPWaVFe8U6idhyTol/XtAFED7eKiihHXx 3bnLehRD7HFMSud7BGLytgQenaWmN2Y9n9bDKednKjAyM5gX0pt5omodk9cUoNasEt qNxW3Y+4Lu/jmzh69HgjeYCgWx04Bp7HsulTZ7aU= Received: from [192.168.211.199] (192.168.211.199) 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; Mon, 29 Jan 2024 11:08:41 +0300 Message-ID: <1b1c7be1-0af8-4a2b-a37f-9eedf45cbf1a@paragon-software.com> Date: Mon, 29 Jan 2024 11:08:41 +0300 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 3/5] fs/ntfs3: Correct function is_rst_area_valid Content-Language: en-US From: Konstantin Komarov To: CC: , References: In-Reply-To: Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: vobn-exch-01.paragon-software.com (172.30.72.13) To vdlg-exch-02.paragon-software.com (172.30.1.105) Reported-by: Robert Morris Signed-off-by: Konstantin Komarov --- =C2=A0fs/ntfs3/fslog.c | 14 ++++++++------ =C2=A01 file changed, 8 insertions(+), 6 deletions(-) diff --git a/fs/ntfs3/fslog.c b/fs/ntfs3/fslog.c index 7dbb000fc691..855519713bf7 100644 --- a/fs/ntfs3/fslog.c +++ b/fs/ntfs3/fslog.c @@ -465,7 +465,7 @@ static inline bool is_rst_area_valid(const struct=20 RESTART_HDR *rhdr) =C2=A0{ =C2=A0=C2=A0=C2=A0 =C2=A0const struct RESTART_AREA *ra; =C2=A0=C2=A0=C2=A0 =C2=A0u16 cl, fl, ul; -=C2=A0=C2=A0 =C2=A0u32 off, l_size, file_dat_bits, file_size_round; +=C2=A0=C2=A0 =C2=A0u32 off, l_size, seq_bits; =C2=A0=C2=A0=C2=A0 =C2=A0u16 ro =3D le16_to_cpu(rhdr->ra_off); =C2=A0=C2=A0=C2=A0 =C2=A0u32 sys_page =3D le32_to_cpu(rhdr->sys_page_size); @@ -511,13 +511,15 @@ static inline bool is_rst_area_valid(const struct=20 RESTART_HDR *rhdr) =C2=A0=C2=A0=C2=A0 =C2=A0/* Make sure the sequence number bits match the l= og file size. */ =C2=A0=C2=A0=C2=A0 =C2=A0l_size =3D le64_to_cpu(ra->l_size); -=C2=A0=C2=A0 =C2=A0file_dat_bits =3D sizeof(u64) * 8 - le32_to_cpu(ra->seq= _num_bits); -=C2=A0=C2=A0 =C2=A0file_size_round =3D 1u << (file_dat_bits + 3); -=C2=A0=C2=A0 =C2=A0if (file_size_round !=3D l_size && -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 (file_size_round < l_size || (file_s= ize_round / 2) > l_size)) { -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return false; +=C2=A0=C2=A0 =C2=A0seq_bits =3D sizeof(u64) * 8 + 3; +=C2=A0=C2=A0 =C2=A0while (l_size) { +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0l_size >>=3D 1; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0seq_bits -=3D 1; =C2=A0=C2=A0=C2=A0 =C2=A0} +=C2=A0=C2=A0 =C2=A0if (seq_bits !=3D ra->seq_num_bits) +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return false; + =C2=A0=C2=A0=C2=A0 =C2=A0/* The log page data offset and record header len= gth must be=20 quad-aligned. */ =C2=A0=C2=A0=C2=A0 =C2=A0if (!IS_ALIGNED(le16_to_cpu(ra->data_off), 8) || =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 !IS_ALIGNED(le16_to_cpu(ra->re= c_hdr_len), 8)) --=20 2.34.1 From nobody Wed Dec 24 08:05:10 2025 Received: from relayaws-01.paragon-software.com (relayaws-01.paragon-software.com [35.157.23.187]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 39D04537E7; Mon, 29 Jan 2024 08:09:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=35.157.23.187 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706515760; cv=none; b=E1sGzERwFJc+acXqYIc6VQ12xN6eV/3hYYA4p5sQWF1xvDRK4neih1GgMnY84skxYGhytmsj928p5tJOKjogyc+J5U6UN5g58d0vZMNbo7gjrj26g/r0RJVjbSFfwWX+T+v6DTi0UWoBHKyWNkGZYICDuCa6Gflf7n1q9ktPyrE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706515760; c=relaxed/simple; bh=sOrdau0GamvWHIukB319bDFasFZTPBKgNYMEGNGazj4=; h=Message-ID:Date:MIME-Version:Subject:From:To:CC:References: In-Reply-To:Content-Type; b=fcgK/1ndvyyVbdmLFGWRIH7Fy7pmO2F0RW8eS98Oy7busKeCxvWw8hLKiepiOpL9geGUQPya6OIOnLzgX/qJKepBnM3fSCpWWh98d1MovJisgCfsA5i1ozzwqLx4A7efJsjnIb+Zy7D8VPbwNBH3THnkG31DsLNPaGaLhrYZBSA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=paragon-software.com; spf=pass smtp.mailfrom=paragon-software.com; dkim=pass (1024-bit key) header.d=paragon-software.com header.i=@paragon-software.com header.b=ReYwIs/7; dkim=pass (1024-bit key) header.d=paragon-software.com header.i=@paragon-software.com header.b=MhXoP1eQ; arc=none smtp.client-ip=35.157.23.187 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=paragon-software.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=paragon-software.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=paragon-software.com header.i=@paragon-software.com header.b="ReYwIs/7"; dkim=pass (1024-bit key) header.d=paragon-software.com header.i=@paragon-software.com header.b="MhXoP1eQ" Received: from relayfre-01.paragon-software.com (unknown [172.30.72.12]) by relayaws-01.paragon-software.com (Postfix) with ESMTPS id EFEEE211A; Mon, 29 Jan 2024 08:02:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1706515347; bh=mHtFVlGdQT3NlQXqvNi7PsHSg3EPQVtrgac40SxL8CQ=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=ReYwIs/7rsKMUum49OlcvYARoFaXe8NkykGh9OVAemrQwbi1mKrgu9eLlYI5ynnqs ADKYd/FZwEBD6raZyW9RCavC8V9eDb7jr4YB6q37r8zJEg/78OYmLEuTCkss5FlZH1 XMUspqloSkpfcXH0CC/qOtVXS+SKaH2UAOC9RgUg= 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 4C34A1D33; Mon, 29 Jan 2024 08:09:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1706515757; bh=mHtFVlGdQT3NlQXqvNi7PsHSg3EPQVtrgac40SxL8CQ=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=MhXoP1eQRy++X4M6HQL73o3RLT82XyIrdJeQ8fVC5j+Ce3OH+MAe3ZdHQrBcdyxuM /bqq3icfy7ZxMVfHvo/ykZZQG1DG6sXyH2Pk0WsWmcZZCsG5PPT3g6BQCwJh/k8p4S 5V5lFs8i+0SfLwsVl3O73qpzFJtkhGPtpzqp6Avo= Received: from [192.168.211.199] (192.168.211.199) 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; Mon, 29 Jan 2024 11:09:16 +0300 Message-ID: <92465892-aad4-428d-bcfe-03584d302bb5@paragon-software.com> Date: Mon, 29 Jan 2024 11:09:16 +0300 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 4/5] fs/ntfs3: Fixed overflow check in mi_enum_attr() Content-Language: en-US From: Konstantin Komarov To: CC: , References: In-Reply-To: Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: vobn-exch-01.paragon-software.com (172.30.72.13) To vdlg-exch-02.paragon-software.com (172.30.1.105) Reported-by: Robert Morris Signed-off-by: Konstantin Komarov --- =C2=A0fs/ntfs3/record.c | 2 +- =C2=A01 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/ntfs3/record.c b/fs/ntfs3/record.c index 7b6423584eae..6aa3a9d44df1 100644 --- a/fs/ntfs3/record.c +++ b/fs/ntfs3/record.c @@ -279,7 +279,7 @@ struct ATTRIB *mi_enum_attr(struct mft_inode *mi,=20 struct ATTRIB *attr) =C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 if (t16 > asize) =C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 return NULL; -=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 if (t16 + le32_to_cpu(attr->res.data= _size) > asize) +=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 if (le32_to_cpu(attr->res.data_size)= > asize - t16) =C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 return NULL; =C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 t32 =3D sizeof(short) * attr->= name_len; --=20 2.34.1 From nobody Wed Dec 24 08:05:10 2025 Received: from relayaws-01.paragon-software.com (relayaws-01.paragon-software.com [35.157.23.187]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 322A2524D1; Mon, 29 Jan 2024 08:09:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=35.157.23.187 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706515793; cv=none; b=DyDkCZ6yJWhWhDh16vjIrxeGHutEzoVDCE8pE+ZmnUsqj/xLa03kE3ZkFOceras0oHGTUX4LokfHrSmH/riuqWQ2fzRucXccoSoTJ5ODEg0tfvQXM1iHJ4bzeLN+hEm6I7rQbDJr7nBXl//b6J+ZFuSylwAOfaOh8Arnx4frMGA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706515793; c=relaxed/simple; bh=KX95JtnfIp7j8VPbIRjew5/zzGHwozjZO+7zxqvr6n4=; h=Message-ID:Date:MIME-Version:Subject:From:To:CC:References: In-Reply-To:Content-Type; b=MaQJhnH63sIoVgy6pw1smoRMH5aHXeREmjNlOOnCuyLsxh6n7sVp8EWnED+nDx8Ql8KBdRke5LrVsGLQmaF0VuOJk0X5MbkgCwSfrMjqckT0DzHoEREM8IZVwgNYPDBpEJvjMEhGMA8HV+9kJcOoJIVCJN/1ycuS7We+obto2G8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=paragon-software.com; spf=pass smtp.mailfrom=paragon-software.com; dkim=pass (1024-bit key) header.d=paragon-software.com header.i=@paragon-software.com header.b=CvaSyzMn; arc=none smtp.client-ip=35.157.23.187 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=paragon-software.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=paragon-software.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=paragon-software.com header.i=@paragon-software.com header.b="CvaSyzMn" Received: from dlg2.mail.paragon-software.com (vdlg-exch-02.paragon-software.com [172.30.1.105]) by relayaws-01.paragon-software.com (Postfix) with ESMTPS id E9FB3211A; Mon, 29 Jan 2024 08:02:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1706515380; bh=OOsG9oL5dHVVYoMwTwA8sDDvVQSxjrxSXBRzmTmF2nw=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=CvaSyzMnnyoXfENdmRZuDjgsGfGg6Hucbb6A9eG1C8gZkkMh7b9EryaYA41RJvThq FmGP4pdlWQtHvkJ93jZSeYSYg0cl5IZgxk9D6r8exkhSv638R3/uK4eDlhQN2NW9ay Gzy+6XGAMsTuGr36+5vxEm3RsJGusY68D3f6I7/w= Received: from [192.168.211.199] (192.168.211.199) 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; Mon, 29 Jan 2024 11:09:49 +0300 Message-ID: <75e61877-b616-4227-bca6-83580442d822@paragon-software.com> Date: Mon, 29 Jan 2024 11:09:49 +0300 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 5/5] fs/ntfs3: Update inode->i_size after success write into compressed file Content-Language: en-US From: Konstantin Komarov To: CC: , References: In-Reply-To: Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: vobn-exch-01.paragon-software.com (172.30.72.13) To vdlg-exch-02.paragon-software.com (172.30.1.105) Reported-by: Giovanni Santini Signed-off-by: Konstantin Komarov --- =C2=A0fs/ntfs3/file.c | 2 ++ =C2=A01 file changed, 2 insertions(+) diff --git a/fs/ntfs3/file.c b/fs/ntfs3/file.c index b702543a8795..691b0c9b95ae 100644 --- a/fs/ntfs3/file.c +++ b/fs/ntfs3/file.c @@ -1054,6 +1054,8 @@ static ssize_t ntfs_compress_write(struct kiocb=20 *iocb, struct iov_iter *from) =C2=A0=C2=A0=C2=A0 =C2=A0iocb->ki_pos +=3D written; =C2=A0=C2=A0=C2=A0 =C2=A0if (iocb->ki_pos > ni->i_valid) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ni->i_valid =3D iocb->ki_pos; +=C2=A0=C2=A0 =C2=A0if (iocb->ki_pos > i_size) +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0i_size_write(inode, iocb->ki_pos); =C2=A0=C2=A0=C2=A0 =C2=A0return written; =C2=A0} --=20 2.34.1