Message ID | 20240322165518.8147-1-shikemeng@huaweicloud.com |
---|---|
State | New |
Headers | show |
Series | ext4: implement filesystem specific alloc_inode in unit test | expand |
On Sat, Mar 23, 2024 at 12:55:18AM +0800, Kemeng Shi wrote: > We expect inode with ext4_info_info type as following: > mbt_kunit_init > mbt_mb_init > ext4_mb_init > ext4_mb_init_backend > sbi->s_buddy_cache = new_inode(sb); > EXT4_I(sbi->s_buddy_cache)->i_disksize = 0; > > Implement alloc_inode ionde with ext4_inode_info type to avoid > out-of-bounds write. > > Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com> > Reported-by: Guenter Roeck <linux@roeck-us.net> Tested-by: Guenter Roeck <linux@roeck-us.net> Guenter
diff --git a/fs/ext4/mballoc-test.c b/fs/ext4/mballoc-test.c index 044ca5238f41..49aabcfe6b46 100644 --- a/fs/ext4/mballoc-test.c +++ b/fs/ext4/mballoc-test.c @@ -30,7 +30,31 @@ struct mbt_ext4_super_block { #define MBT_CTX(_sb) (&MBT_SB(_sb)->mbt_ctx) #define MBT_GRP_CTX(_sb, _group) (&MBT_CTX(_sb)->grp_ctx[_group]) +static struct inode *mbt_alloc_inode(struct super_block *sb) +{ + struct ext4_inode_info *ei; + + ei = kmalloc(sizeof(struct ext4_inode_info), GFP_KERNEL); + if (!ei) + return NULL; + + INIT_LIST_HEAD(&ei->i_orphan); + init_rwsem(&ei->xattr_sem); + init_rwsem(&ei->i_data_sem); + inode_init_once(&ei->vfs_inode); + ext4_fc_init_inode(&ei->vfs_inode); + + return &ei->vfs_inode; +} + +static void mbt_free_inode(struct inode *inode) +{ + kfree(EXT4_I(inode)); +} + static const struct super_operations mbt_sops = { + .alloc_inode = mbt_alloc_inode, + .free_inode = mbt_free_inode, }; static void mbt_kill_sb(struct super_block *sb)
We expect inode with ext4_info_info type as following: mbt_kunit_init mbt_mb_init ext4_mb_init ext4_mb_init_backend sbi->s_buddy_cache = new_inode(sb); EXT4_I(sbi->s_buddy_cache)->i_disksize = 0; Implement alloc_inode ionde with ext4_inode_info type to avoid out-of-bounds write. Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com> Reported-by: Guenter Roeck <linux@roeck-us.net> --- fs/ext4/mballoc-test.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)