Re: [PATCH AUTOSEL 6.1 09/28] fs/ntfs3: Prevent generic message "attempt to access beyond end of device"

Pavel Machek
2024-02-18T18:00:15Z

[-- Attachment #1: Type: text/plain, Size: 2743 bytes --]

Hi!

> From: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
>
> [ Upstream commit 5ca87d01eba7bdfe9536a157ca33c1455bb8d16c ]
>
> It used in test environment.

This seems to just replace one printk with another; not sure we want
it in stable.

Best regards,
Pavel

> diff --git a/fs/ntfs3/fsntfs.c b/fs/ntfs3/fsntfs.c
> index 873b1434a998..34813429e2ab 100644
> --- a/fs/ntfs3/fsntfs.c
> +++ b/fs/ntfs3/fsntfs.c
> @@ -976,6 +976,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 977e1422f904..cbeda94d7161 100644
> --- a/fs/ntfs3/ntfs_fs.h
> +++ b/fs/ntfs3/ntfs_fs.h
> @@ -580,6 +580,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,
> bool simple);
> @@ -1012,19 +1013,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);

--
People of Russia, stop Putin before his war on Ukraine escalates.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]