From patchwork Mon Jan 29 08:07:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Konstantin Komarov X-Patchwork-Id: 13535142 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-fsdevel@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: 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 ---  fs/ntfs3/fsntfs.c  | 24 ++++++++++++++++++++++++  fs/ntfs3/ntfs_fs.h | 14 +-------------  2 files changed, 25 insertions(+), 13 deletions(-)                 bool simple); @@ -1032,19 +1033,6 @@ static inline u64 bytes_to_block(const struct super_block *sb, u64 size)      return (size + sb->s_blocksize - 1) >> sb->s_blocksize_bits;  } -static inline struct buffer_head *ntfs_bread(struct super_block *sb, -                         sector_t block) -{ -    struct buffer_head *bh = sb_bread_unmovable(sb, block); - -    if (bh) -        return bh; - -    ntfs_err(sb, "failed to read volume at offset 0x%llx", -         (u64)block << sb->s_blocksize_bits); -    return NULL; -} -  static inline struct ntfs_inode *ntfs_i(struct inode *inode)  {      return container_of(inode, struct ntfs_inode, vfs_inode); 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 *sd, size_t bytes)      return cpu_to_le32(hash);  } +/* + * simple wrapper for sb_bread_unmovable. + */ +struct buffer_head *ntfs_bread(struct super_block *sb, sector_t block) +{ +    struct ntfs_sb_info *sbi = sb->s_fs_info; +    struct buffer_head *bh; + +    if (unlikely(block >= sbi->volume.blocks)) { +        /* prevent generic message "attempt to access beyond end of device" */ +        ntfs_err(sb, "try to read out of volume at offset 0x%llx", +             (u64)block << sb->s_blocksize_bits); +        return NULL; +    } + +    bh = sb_bread_unmovable(sb, block); +    if (bh) +        return bh; + +    ntfs_err(sb, "failed to read volume at offset 0x%llx", +         (u64)block << sb->s_blocksize_bits); +    return NULL; +} +  int ntfs_sb_read(struct super_block *sb, u64 lbo, size_t bytes, void *buffer)  {      struct block_device *bdev = 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, size_t bytes);  int log_replay(struct ntfs_inode *ni, bool *initialized);  /* Globals from fsntfs.c */ +struct buffer_head *ntfs_bread(struct super_block *sb, sector_t block);  bool ntfs_fix_pre_write(struct NTFS_RECORD_HEADER *rhdr, size_t bytes);  int ntfs_fix_post_read(struct NTFS_RECORD_HEADER *rhdr, size_t bytes, From patchwork Mon Jan 29 08:08:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Konstantin Komarov X-Patchwork-Id: 13535143 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-fsdevel@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: 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 ---  fs/ntfs3/attrib.c  |  4 ++--  fs/ntfs3/dir.c     |  2 +-  fs/ntfs3/file.c    | 11 ++++++-----  fs/ntfs3/frecord.c | 10 +++++-----  fs/ntfs3/index.c   |  8 ++++----  fs/ntfs3/inode.c   |  2 +-  6 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 vbo, u64 bytes)      /* Update inode size. */      ni->i_valid = valid_size; -    ni->vfs_inode.i_size = data_size; +    i_size_write(&ni->vfs_inode, data_size);      inode_set_bytes(&ni->vfs_inode, total_size);      ni->ni_flags |= NI_FLAG_UPDATE_PARENT;      mark_inode_dirty(&ni->vfs_inode); @@ -2499,7 +2499,7 @@ int attr_insert_range(struct ntfs_inode *ni, u64 vbo, u64 bytes)      mi_b->dirty = true;  done: -    ni->vfs_inode.i_size += bytes; +    i_size_write(&ni->vfs_inode, ni->vfs_inode.i_size + bytes);      ni->ni_flags |= NI_FLAG_UPDATE_PARENT;      mark_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 *is_empty, size_t *dirs,      u32 e_size, off, end;      size_t drs = 0, fles = 0, bit = 0;      struct indx_node *node = NULL; -    size_t max_indx = ni->vfs_inode.i_size >> ni->dir.index_bits; +    size_t max_indx = i_size_read(&ni->vfs_inode) >> ni->dir.index_bits;      if (is_empty)          *is_empty = 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 mode, loff_t vbo, loff_t len)              if (err)                  goto out;          } else if (new_size > i_size) { -            inode->i_size = new_size; +            i_size_write(inode, new_size);          }      } @@ -696,7 +696,7 @@ int ntfs3_setattr(struct mnt_idmap *idmap, struct dentry *dentry,              goto out;          }          inode_dio_wait(inode); -        oldsize = inode->i_size; +        oldsize = i_size_read(inode);          newsize = attr->ia_size;          if (newsize <= oldsize) @@ -708,7 +708,7 @@ int ntfs3_setattr(struct mnt_idmap *idmap, struct dentry *dentry,              goto out;          ni->ni_flags |= NI_FLAG_UPDATE_PARENT; -        inode->i_size = newsize; +        i_size_write(inode, newsize);      }      setattr_copy(idmap, inode, attr); @@ -847,7 +847,7 @@ static ssize_t ntfs_compress_write(struct kiocb *iocb, struct iov_iter *from)      size_t count = iov_iter_count(from);      loff_t pos = iocb->ki_pos;      struct inode *inode = file_inode(file); -    loff_t i_size = inode->i_size; +    loff_t i_size = i_size_read(inode);      struct address_space *mapping = inode->i_mapping;      struct ntfs_inode *ni = ntfs_i(inode);      u64 valid = ni->i_valid; @@ -1177,7 +1177,8 @@ static int ntfs_file_release(struct inode *inode, struct file *file)          down_write(&ni->file.run_lock);          err = attr_set_size(ni, ATTR_DATA, NULL, 0, &ni->file.run, -                    inode->i_size, &ni->i_valid, false, NULL); +                    i_size_read(inode), &ni->i_valid, false, +                    NULL);          up_write(&ni->file.run_lock);          ni_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 page *page)      gfp_t gfp_mask;      struct page *pg; -    if (vbo >= ni->vfs_inode.i_size) { +    if (vbo >= i_size_read(&ni->vfs_inode)) {          SetPageUptodate(page);          err = 0;          goto out; @@ -2173,7 +2173,7 @@ int ni_decompress_file(struct ntfs_inode *ni)  {      struct ntfs_sb_info *sbi = ni->mi.sbi;      struct inode *inode = &ni->vfs_inode; -    loff_t i_size = inode->i_size; +    loff_t i_size = i_size_read(inode);      struct address_space *mapping = inode->i_mapping;      gfp_t gfp_mask = mapping_gfp_mask(mapping);      struct page **pages = NULL; @@ -2457,6 +2457,7 @@ int ni_read_frame(struct ntfs_inode *ni, u64 frame_vbo, struct page **pages,      struct ATTR_LIST_ENTRY *le = NULL;      struct runs_tree *run = &ni->file.run;      u64 valid_size = ni->i_valid; +    loff_t i_size = i_size_read(&ni->vfs_inode);      u64 vbo_disk;      size_t unc_size;      u32 frame_size, i, npages_disk, ondisk_size; @@ -2548,7 +2549,7 @@ int ni_read_frame(struct ntfs_inode *ni, u64 frame_vbo, struct page **pages,              }          } -        frames = (ni->vfs_inode.i_size - 1) >> frame_bits; +        frames = (i_size - 1) >> frame_bits;          err = attr_wof_frame_info(ni, attr, run, frame64, frames,                        frame_bits, &ondisk_size, &vbo_data); @@ -2556,8 +2557,7 @@ int ni_read_frame(struct ntfs_inode *ni, u64 frame_vbo, struct page **pages,              goto out2;          if (frame64 == frames) { -            unc_size = 1 + ((ni->vfs_inode.i_size - 1) & -                    (frame_size - 1)); +            unc_size = 1 + ((i_size - 1) & (frame_size - 1));              ondisk_size = attr_size(attr) - vbo_data;          } else {              unc_size = 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 *indx, struct ntfs_inode *ni,          goto out2;      if (in->name == I30_NAME) { -        ni->vfs_inode.i_size = data_size; +        i_size_write(&ni->vfs_inode, data_size);          inode_set_bytes(&ni->vfs_inode, alloc_size);      } @@ -1544,7 +1544,7 @@ static int indx_add_allocate(struct ntfs_index *indx, struct ntfs_inode *ni,      }      if (in->name == I30_NAME) -        ni->vfs_inode.i_size = data_size; +        i_size_write(&ni->vfs_inode, data_size);      *vbn = bit << indx->idx2vbn_bits; @@ -2090,7 +2090,7 @@ static int indx_shrink(struct ntfs_index *indx, struct ntfs_inode *ni,          return err;      if (in->name == I30_NAME) -        ni->vfs_inode.i_size = new_data; +        i_size_write(&ni->vfs_inode, new_data);      bpb = bitmap_size(bit);      if (bpb * 8 == nbits) @@ -2576,7 +2576,7 @@ int indx_delete_entry(struct ntfs_index *indx, struct ntfs_inode *ni,          err = attr_set_size(ni, ATTR_ALLOC, in->name, in->name_len,                      &indx->alloc_run, 0, NULL, false, NULL);          if (in->name == I30_NAME) -            ni->vfs_inode.i_size = 0; +            i_size_write(&ni->vfs_inode, 0);          err = ni_remove_attr(ni, ATTR_ALLOC, in->name, in->name_len,                       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 address_space *mapping, loff_t pos,          }          if (pos + err > inode->i_size) { -            inode->i_size = pos + err; +            i_size_write(inode, pos + err);              dirty = true;          } From patchwork Mon Jan 29 08:08:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Konstantin Komarov X-Patchwork-Id: 13535148 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-fsdevel@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: 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 ---  fs/ntfs3/fslog.c | 14 ++++++++------  1 file changed, 8 insertions(+), 6 deletions(-) @@ -511,13 +511,15 @@ static inline bool is_rst_area_valid(const struct RESTART_HDR *rhdr)      /* Make sure the sequence number bits match the log file size. */      l_size = le64_to_cpu(ra->l_size); -    file_dat_bits = sizeof(u64) * 8 - le32_to_cpu(ra->seq_num_bits); -    file_size_round = 1u << (file_dat_bits + 3); -    if (file_size_round != l_size && -        (file_size_round < l_size || (file_size_round / 2) > l_size)) { -        return false; +    seq_bits = sizeof(u64) * 8 + 3; +    while (l_size) { +        l_size >>= 1; +        seq_bits -= 1;      } +    if (seq_bits != ra->seq_num_bits) +        return false; +      /* The log page data offset and record header length must be quad-aligned. */      if (!IS_ALIGNED(le16_to_cpu(ra->data_off), 8) ||          !IS_ALIGNED(le16_to_cpu(ra->rec_hdr_len), 8)) 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 RESTART_HDR *rhdr)  {      const struct RESTART_AREA *ra;      u16 cl, fl, ul; -    u32 off, l_size, file_dat_bits, file_size_round; +    u32 off, l_size, seq_bits;      u16 ro = le16_to_cpu(rhdr->ra_off);      u32 sys_page = le32_to_cpu(rhdr->sys_page_size); From patchwork Mon Jan 29 08:09:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Konstantin Komarov X-Patchwork-Id: 13535149 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-fsdevel@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: 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 ---  fs/ntfs3/record.c | 2 +-  1 file changed, 1 insertion(+), 1 deletion(-)          t32 = sizeof(short) * attr->name_len; 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, struct ATTRIB *attr)          if (t16 > asize)              return NULL; -        if (t16 + le32_to_cpu(attr->res.data_size) > asize) +        if (le32_to_cpu(attr->res.data_size) > asize - t16)              return NULL; From patchwork Mon Jan 29 08:09:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Konstantin Komarov X-Patchwork-Id: 13535150 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-fsdevel@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: 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 ---  fs/ntfs3/file.c | 2 ++  1 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 *iocb, struct iov_iter *from)      iocb->ki_pos += written;      if (iocb->ki_pos > ni->i_valid)          ni->i_valid = iocb->ki_pos; +    if (iocb->ki_pos > i_size) +        i_size_write(inode, iocb->ki_pos);      return written;