From: "yebin (H)" <yebin10@huawei.com>
To: Jan Kara <jack@suse.cz>, Ye Bin <yebin@huaweicloud.com>
Cc: <tytso@mit.edu>, <adilger.kernel@dilger.ca>,
<linux-ext4@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<syzbot+4d99a966fd74bdeeec36@syzkaller.appspotmail.com>
Subject: Re: [PATCH -next 1/6] ext4: fix WARNING in ext4_expand_extra_isize_ea
Date: Tue, 6 Dec 2022 21:44:46 +0800 [thread overview]
Message-ID: <638F474E.9070901@huawei.com> (raw)
In-Reply-To: <20221206120417.225uxtlg255bzph4@quack3>
On 2022/12/6 20:04, Jan Kara wrote:
> On Tue 06-12-22 09:58:01, Ye Bin wrote:
>> From: Ye Bin <yebin10@huawei.com>
>>
>> Syzbot found the following issue:
>> ------------[ cut here ]------------
>> WARNING: CPU: 1 PID: 3631 at mm/page_alloc.c:5534 __alloc_pages+0x30a/0x560 mm/page_alloc.c:5534
>> Modules linked in:
>> CPU: 1 PID: 3631 Comm: syz-executor261 Not tainted 6.1.0-rc6-syzkaller-00308-g644e9524388a #0
>> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/26/2022
>> RIP: 0010:__alloc_pages+0x30a/0x560 mm/page_alloc.c:5534
>> RSP: 0018:ffffc90003ccf080 EFLAGS: 00010246
>> RAX: ffffc90003ccf0e0 RBX: 000000000000000c RCX: 0000000000000000
>> RDX: 0000000000000028 RSI: 0000000000000000 RDI: ffffc90003ccf108
>> RBP: ffffc90003ccf198 R08: dffffc0000000000 R09: ffffc90003ccf0e0
>> R10: fffff52000799e21 R11: 1ffff92000799e1c R12: 0000000000040c40
>> R13: 1ffff92000799e18 R14: dffffc0000000000 R15: 1ffff92000799e14
>> FS: 0000555555c10300(0000) GS:ffff8880b9900000(0000) knlGS:0000000000000000
>> CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>> CR2: 00007ffc36f70000 CR3: 00000000744ad000 CR4: 00000000003506e0
>> DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
>> DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
>> Call Trace:
>> <TASK>
>> __alloc_pages_node include/linux/gfp.h:223 [inline]
>> alloc_pages_node include/linux/gfp.h:246 [inline]
>> __kmalloc_large_node+0x8a/0x1a0 mm/slab_common.c:1096
>> __do_kmalloc_node mm/slab_common.c:943 [inline]
>> __kmalloc+0xfe/0x1a0 mm/slab_common.c:968
>> kmalloc include/linux/slab.h:558 [inline]
>> ext4_xattr_move_to_block fs/ext4/xattr.c:2558 [inline]
>> ext4_xattr_make_inode_space fs/ext4/xattr.c:2673 [inline]
>> ext4_expand_extra_isize_ea+0xe3f/0x1cd0 fs/ext4/xattr.c:2765
>> __ext4_expand_extra_isize+0x2b8/0x3f0 fs/ext4/inode.c:5857
>> ext4_try_to_expand_extra_isize fs/ext4/inode.c:5900 [inline]
>> __ext4_mark_inode_dirty+0x51a/0x670 fs/ext4/inode.c:5978
>> ext4_inline_data_truncate+0x548/0xd00 fs/ext4/inline.c:2021
>> ext4_truncate+0x341/0xeb0 fs/ext4/inode.c:4221
>> ext4_process_orphan+0x1aa/0x2d0 fs/ext4/orphan.c:339
>> ext4_orphan_cleanup+0xb60/0x1340 fs/ext4/orphan.c:474
>> __ext4_fill_super fs/ext4/super.c:5515 [inline]
>> ext4_fill_super+0x80ed/0x8610 fs/ext4/super.c:5643
>> get_tree_bdev+0x400/0x620 fs/super.c:1324
>> vfs_get_tree+0x88/0x270 fs/super.c:1531
>> do_new_mount+0x289/0xad0 fs/namespace.c:3040
>> do_mount fs/namespace.c:3383 [inline]
>> __do_sys_mount fs/namespace.c:3591 [inline]
>> __se_sys_mount+0x2d3/0x3c0 fs/namespace.c:3568
>> do_syscall_x64 arch/x86/entry/common.c:50 [inline]
>> do_syscall_64+0x3d/0xb0 arch/x86/entry/common.c:80
>> entry_SYSCALL_64_after_hwframe+0x63/0xcd
>> </TASK>
>>
>> Reason is allocate 16M memory by kmalloc, but MAX_ORDER is 11, kmalloc
>> can allocate maxium size memory is 4M.
>> XATTR_SIZE_MAX is currently 64k, but EXT4_XATTR_SIZE_MAX is '(1 << 24)',
>> so 'ext4_xattr_check_entries()' regards this length as legal. Then trigger
>> warning in 'ext4_xattr_move_to_block()'.
>> To solve above issue, according to Jan Kara's suggestion use kvmalloc()
>> to allocate memory in ext4_xattr_move_to_block().
>>
>> Reported-by: syzbot+4d99a966fd74bdeeec36@syzkaller.appspotmail.com
>> Fixes: 54dd0e0a1b25 ("ext4: add extra checks to ext4_xattr_block_get()")
>> Signed-off-by: Ye Bin <yebin10@huawei.com>
> The changelog speak about kvmalloc() while your patch changes
> EXT4_XATTR_SIZE_MAX. This needs to be fixed. If Ted is find with this
> change, I have no problem with it either but I remember there were some
> discussions about what EXT4_XATTR_SIZE_MAX should be when ea_inode feature
> has been developed. Ted might remember.
I'm sorry I forgot to modify the commit message, I will modify the
changelog again.
> Also the change from kmalloc() to kvmalloc() is a desirable one anyway. It
> is not always easy to find physically contiguous 64k of memory so
> kvmalloc() makes the allocation much more likely to succeed.
>
> Honza
A later patch use kvmalloc to allocate extended attribute value memory.
next prev parent reply other threads:[~2022-12-06 13:44 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-06 1:58 [PATCH -next 0/6] Fix two issue about ext4 extended attribute Ye Bin
2022-12-06 1:58 ` [PATCH -next 1/6] ext4: fix WARNING in ext4_expand_extra_isize_ea Ye Bin
2022-12-06 12:04 ` Jan Kara
2022-12-06 13:44 ` yebin (H) [this message]
2022-12-06 1:58 ` [PATCH -next 2/6] ext4: add primary check extended attribute inode in ext4_xattr_check_entries() Ye Bin
2022-12-06 1:58 ` [PATCH -next 3/6] ext4: remove unnessary size check in ext4_xattr_inode_get() Ye Bin
2022-12-06 1:58 ` [PATCH -next 4/6] ext4: allocate extended attribute value in vmalloc area Ye Bin
2022-12-06 1:58 ` [PATCH -next 5/6] ext4: rename xattr_find_entry() and __xattr_check_inode() Ye Bin
2022-12-06 12:07 ` Jan Kara
2022-12-06 1:58 ` [PATCH -next 6/6] ext4: fix inode leak in 'ext4_xattr_inode_create()' Ye Bin
2022-12-06 12:10 ` Jan Kara
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=638F474E.9070901@huawei.com \
--to=yebin10@huawei.com \
--cc=adilger.kernel@dilger.ca \
--cc=jack@suse.cz \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=syzbot+4d99a966fd74bdeeec36@syzkaller.appspotmail.com \
--cc=tytso@mit.edu \
--cc=yebin@huaweicloud.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.