diff options
| author | Jan Kara <jack@suse.cz> | 2025-07-09 11:55:46 +0200 |
|---|---|---|
| committer | Christian Brauner <brauner@kernel.org> | 2025-07-11 11:39:31 +0200 |
| commit | 0a9e7405131380b57e155f10242b2e25d2e51852 (patch) | |
| tree | 59701337468a922ab33a08ce1d84d5a2fd426e00 /fs/isofs | |
| parent | cachefiles: Fix the incorrect return value in __cachefiles_write() (diff) | |
| download | linux-0a9e7405131380b57e155f10242b2e25d2e51852.tar.gz linux-0a9e7405131380b57e155f10242b2e25d2e51852.zip | |
isofs: Verify inode mode when loading from disk
Verify that the inode mode is sane when loading it from the disk to
avoid complaints from VFS about setting up invalid inodes.
Reported-by: syzbot+895c23f6917da440ed0d@syzkaller.appspotmail.com
CC: stable@vger.kernel.org
Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/20250709095545.31062-2-jack@suse.cz
Acked-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'fs/isofs')
| -rw-r--r-- | fs/isofs/inode.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c index d5da9817df9b..33e6a620c103 100644 --- a/fs/isofs/inode.c +++ b/fs/isofs/inode.c @@ -1440,9 +1440,16 @@ static int isofs_read_inode(struct inode *inode, int relocated) inode->i_op = &page_symlink_inode_operations; inode_nohighmem(inode); inode->i_data.a_ops = &isofs_symlink_aops; - } else + } else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) || + S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) { /* XXX - parse_rock_ridge_inode() had already set i_rdev. */ init_special_inode(inode, inode->i_mode, inode->i_rdev); + } else { + printk(KERN_DEBUG "ISOFS: Invalid file type 0%04o for inode %lu.\n", + inode->i_mode, inode->i_ino); + ret = -EIO; + goto fail; + } ret = 0; out: |
