* [PATCH v3 0/4] Fix two issue about ext4 extended attribute
@ 2022-12-08 2:32 Ye Bin
2022-12-08 2:32 ` [PATCH v3 1/4] ext4: fix WARNING in ext4_expand_extra_isize_ea Ye Bin
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Ye Bin @ 2022-12-08 2:32 UTC (permalink / raw)
To: tytso, adilger.kernel, linux-ext4; +Cc: linux-kernel, jack, Ye Bin
From: Ye Bin <yebin10@huawei.com>
Diff v3 vs v2:
1. Remove patch [2-3].
2. Modify change log according to Bagas Sanjaya's suggestions.
Diff v2 vs v1:
1.Modify commit message about "ext4: fix WARNING in ext4_expand_extra_isize_ea"
2.Modify the indentation of arguments about "ext4: rename xattr_find_entry()
and __xattr_check_inode()"
This patchset fix two issues:
1. Patch [1]-[4] fix WARNING in ext4_expand_extra_isize_ea.
2. Patch [6] fix inode leak in 'ext4_xattr_inode_create()'.
3. Patch [5] is cleanup.
Ye Bin (4):
ext4: fix WARNING in ext4_expand_extra_isize_ea
ext4: allocate extended attribute value in vmalloc area
ext4: rename xattr_find_entry() and __xattr_check_inode()
ext4: fix inode leak in 'ext4_xattr_inode_create()'
fs/ext4/xattr.c | 42 +++++++++++++++++++++++-------------------
fs/ext4/xattr.h | 11 +++--------
2 files changed, 26 insertions(+), 27 deletions(-)
--
2.31.1
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH v3 1/4] ext4: fix WARNING in ext4_expand_extra_isize_ea 2022-12-08 2:32 [PATCH v3 0/4] Fix two issue about ext4 extended attribute Ye Bin @ 2022-12-08 2:32 ` Ye Bin 2022-12-09 5:35 ` Theodore Ts'o 2022-12-08 2:32 ` [PATCH v3 2/4] ext4: allocate extended attribute value in vmalloc area Ye Bin ` (2 subsequent siblings) 3 siblings, 1 reply; 9+ messages in thread From: Ye Bin @ 2022-12-08 2:32 UTC (permalink / raw) To: tytso, adilger.kernel, linux-ext4 Cc: linux-kernel, jack, Ye Bin, syzbot+4d99a966fd74bdeeec36 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 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 maximum size memory is 4M. XATTR_SIZE_MAX is currently 64K, but EXT4_XATTR_SIZE_MAX is 16M, so 'ext4_xattr_check_entries()' regards this length as legal. Then trigger warning in 'ext4_xattr_move_to_block()'. To solve above issue, change EXT4_XATTR_SIZE_MAX from 16M to 64K. As VFS limit extended attribute maximum size to 64K. So we can assume that there will be no extended attribute with a length greater than 64K. 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> --- fs/ext4/xattr.h | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/fs/ext4/xattr.h b/fs/ext4/xattr.h index 824faf0b15a8..c71e582b1007 100644 --- a/fs/ext4/xattr.h +++ b/fs/ext4/xattr.h @@ -71,15 +71,10 @@ struct ext4_xattr_entry { #define IFIRST(hdr) ((struct ext4_xattr_entry *)((hdr)+1)) /* - * XATTR_SIZE_MAX is currently 64k, but for the purposes of checking - * for file system consistency errors, we use a somewhat bigger value. - * This allows XATTR_SIZE_MAX to grow in the future, but by using this - * instead of INT_MAX for certain consistency checks, we don't need to - * worry about arithmetic overflows. (Actually XATTR_SIZE_MAX is - * defined in include/uapi/linux/limits.h, so changing it is going - * not going to be trivial....) + * Use XATTR_SIZE_MAX to checking for file system consistency errors. Extended + * attribute length exceed XATTR_SIZE_MAX is illegal. */ -#define EXT4_XATTR_SIZE_MAX (1 << 24) +#define EXT4_XATTR_SIZE_MAX XATTR_SIZE_MAX /* * The minimum size of EA value when you start storing it in an external inode -- 2.31.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v3 1/4] ext4: fix WARNING in ext4_expand_extra_isize_ea 2022-12-08 2:32 ` [PATCH v3 1/4] ext4: fix WARNING in ext4_expand_extra_isize_ea Ye Bin @ 2022-12-09 5:35 ` Theodore Ts'o 0 siblings, 0 replies; 9+ messages in thread From: Theodore Ts'o @ 2022-12-09 5:35 UTC (permalink / raw) To: Ye Bin Cc: adilger.kernel, linux-ext4, linux-kernel, jack, Ye Bin, syzbot+4d99a966fd74bdeeec36 In general, please don't use commit summaries like: ext4: fix WARNING in ext4_expand_extra_isize_ea The commit summary should be a summary of what the change *does*. A description of *why* the change is needed is properly placed in the body of the description. So something like "ext4: clamp EXT4_XATTR_SIZE_MAX to XATTR_SIZE_MAX" would be a better one-line commit summary. That being said, I've decided to not apply this patch. A 16 MB extended attribute size is not _that_ insane, although admittedly it's quite bit larger than any other file system or OS supports (unless you include Solaris and NTFS's alternate data forks as "extended attributes"). I personally don't think the mm/page_alloc warning is that big of a deal (even if it does cause a Syzbot report), and if you really do care about suppressing the warning, using the kvmalloc() instead of kmalloc() will do that --- and it does make ext4 friendly in the case of where we are storing, say, a 30KB Windows ACL as an extended attribute, since it avoided needing to make a order 3 page allocation. (Which again, as far as I'm concerned, is more important than the suppressing the page_alloc warning.) We may ultimately decide to clamp EXT4_XATTR_SIZE_MAX to XATTR_SIZE_MAX, but one could imagine some system attribute that in the future might want to be larger than 32k, that wouldn't be accessed via the standard xattr API. That seems unlikely, but I want to keep our options open. Cheers, - Ted ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 2/4] ext4: allocate extended attribute value in vmalloc area 2022-12-08 2:32 [PATCH v3 0/4] Fix two issue about ext4 extended attribute Ye Bin 2022-12-08 2:32 ` [PATCH v3 1/4] ext4: fix WARNING in ext4_expand_extra_isize_ea Ye Bin @ 2022-12-08 2:32 ` Ye Bin 2022-12-09 5:35 ` Theodore Ts'o 2022-12-08 2:32 ` [PATCH v3 3/4] ext4: rename xattr_find_entry() and __xattr_check_inode() Ye Bin 2022-12-08 2:32 ` [PATCH v3 4/4] ext4: fix inode leak in 'ext4_xattr_inode_create()' Ye Bin 3 siblings, 1 reply; 9+ messages in thread From: Ye Bin @ 2022-12-08 2:32 UTC (permalink / raw) To: tytso, adilger.kernel, linux-ext4; +Cc: linux-kernel, jack, Ye Bin From: Ye Bin <yebin10@huawei.com> Now, extended attribute value maximum length is 64K. The memory requested here does not need continuous physical addresses, so it is appropriate to use kvmalloc to request memory. At the same time, it can also cope with the situation that the extended attribute will become longer in the future. Signed-off-by: Ye Bin <yebin10@huawei.com> Reviewed-by: Jan Kara <jack@suse.cz> --- fs/ext4/xattr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c index 718ef3987f94..23cfefc6d262 100644 --- a/fs/ext4/xattr.c +++ b/fs/ext4/xattr.c @@ -2556,7 +2556,7 @@ static int ext4_xattr_move_to_block(handle_t *handle, struct inode *inode, is = kzalloc(sizeof(struct ext4_xattr_ibody_find), GFP_NOFS); bs = kzalloc(sizeof(struct ext4_xattr_block_find), GFP_NOFS); - buffer = kmalloc(value_size, GFP_NOFS); + buffer = kvmalloc(value_size, GFP_NOFS); b_entry_name = kmalloc(entry->e_name_len + 1, GFP_NOFS); if (!is || !bs || !buffer || !b_entry_name) { error = -ENOMEM; @@ -2608,7 +2608,7 @@ static int ext4_xattr_move_to_block(handle_t *handle, struct inode *inode, error = 0; out: kfree(b_entry_name); - kfree(buffer); + kvfree(buffer); if (is) brelse(is->iloc.bh); if (bs) -- 2.31.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v3 2/4] ext4: allocate extended attribute value in vmalloc area 2022-12-08 2:32 ` [PATCH v3 2/4] ext4: allocate extended attribute value in vmalloc area Ye Bin @ 2022-12-09 5:35 ` Theodore Ts'o 0 siblings, 0 replies; 9+ messages in thread From: Theodore Ts'o @ 2022-12-09 5:35 UTC (permalink / raw) To: Ye Bin; +Cc: adilger.kernel, linux-ext4, linux-kernel, jack, Ye Bin On Thu, Dec 08, 2022 at 10:32:31AM +0800, Ye Bin wrote: > From: Ye Bin <yebin10@huawei.com> > > Now, extended attribute value maximum length is 64K. The memory requested > here does not need continuous physical addresses, so it is appropriate to > use kvmalloc to request memory. At the same time, it can also cope with > the situation that the extended attribute will become longer in the future. > > Signed-off-by: Ye Bin <yebin10@huawei.com> > Reviewed-by: Jan Kara <jack@suse.cz> Applied, thanks. - Ted ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 3/4] ext4: rename xattr_find_entry() and __xattr_check_inode() 2022-12-08 2:32 [PATCH v3 0/4] Fix two issue about ext4 extended attribute Ye Bin 2022-12-08 2:32 ` [PATCH v3 1/4] ext4: fix WARNING in ext4_expand_extra_isize_ea Ye Bin 2022-12-08 2:32 ` [PATCH v3 2/4] ext4: allocate extended attribute value in vmalloc area Ye Bin @ 2022-12-08 2:32 ` Ye Bin 2022-12-09 5:38 ` Theodore Ts'o 2022-12-08 2:32 ` [PATCH v3 4/4] ext4: fix inode leak in 'ext4_xattr_inode_create()' Ye Bin 3 siblings, 1 reply; 9+ messages in thread From: Ye Bin @ 2022-12-08 2:32 UTC (permalink / raw) To: tytso, adilger.kernel, linux-ext4; +Cc: linux-kernel, jack, Ye Bin From: Ye Bin <yebin10@huawei.com> Prepend ext4 prefix to function names of xattr_find_entry() and __xattr_check_inode() for consistency with other functions in ext4 xattr module. Signed-off-by: Ye Bin <yebin10@huawei.com> Reviewed-by: Jan Kara <jack@suse.cz> --- fs/ext4/xattr.c | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c index 23cfefc6d262..99dacb0393fa 100644 --- a/fs/ext4/xattr.c +++ b/fs/ext4/xattr.c @@ -260,8 +260,9 @@ __ext4_xattr_check_block(struct inode *inode, struct buffer_head *bh, static int -__xattr_check_inode(struct inode *inode, struct ext4_xattr_ibody_header *header, - void *end, const char *function, unsigned int line) +__ext4_xattr_check_inode(struct inode *inode, + struct ext4_xattr_ibody_header *header, void *end, + const char *function, unsigned int line) { int error = -EFSCORRUPTED; @@ -276,12 +277,12 @@ __xattr_check_inode(struct inode *inode, struct ext4_xattr_ibody_header *header, return error; } -#define xattr_check_inode(inode, header, end) \ - __xattr_check_inode((inode), (header), (end), __func__, __LINE__) +#define ext4_xattr_check_inode(inode, header, end) \ + __ext4_xattr_check_inode((inode), (header), (end), __func__, __LINE__) static int -xattr_find_entry(struct inode *inode, struct ext4_xattr_entry **pentry, - void *end, int name_index, const char *name, int sorted) +ext4_xattr_find_entry(struct inode *inode, struct ext4_xattr_entry **pentry, + void *end, int name_index, const char *name, int sorted) { struct ext4_xattr_entry *entry, *next; size_t name_len; @@ -554,7 +555,7 @@ ext4_xattr_block_get(struct inode *inode, int name_index, const char *name, ext4_xattr_block_cache_insert(ea_block_cache, bh); entry = BFIRST(bh); end = bh->b_data + bh->b_size; - error = xattr_find_entry(inode, &entry, end, name_index, name, 1); + error = ext4_xattr_find_entry(inode, &entry, end, name_index, name, 1); if (error) goto cleanup; size = le32_to_cpu(entry->e_value_size); @@ -605,11 +606,11 @@ ext4_xattr_ibody_get(struct inode *inode, int name_index, const char *name, raw_inode = ext4_raw_inode(&iloc); header = IHDR(inode, raw_inode); end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size; - error = xattr_check_inode(inode, header, end); + error = ext4_xattr_check_inode(inode, header, end); if (error) goto cleanup; entry = IFIRST(header); - error = xattr_find_entry(inode, &entry, end, name_index, name, 0); + error = ext4_xattr_find_entry(inode, &entry, end, name_index, name, 0); if (error) goto cleanup; size = le32_to_cpu(entry->e_value_size); @@ -750,7 +751,7 @@ ext4_xattr_ibody_list(struct dentry *dentry, char *buffer, size_t buffer_size) raw_inode = ext4_raw_inode(&iloc); header = IHDR(inode, raw_inode); end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size; - error = xattr_check_inode(inode, header, end); + error = ext4_xattr_check_inode(inode, header, end); if (error) goto cleanup; error = ext4_xattr_list_entries(dentry, IFIRST(header), @@ -836,7 +837,7 @@ int ext4_get_inode_usage(struct inode *inode, qsize_t *usage) raw_inode = ext4_raw_inode(&iloc); header = IHDR(inode, raw_inode); end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size; - ret = xattr_check_inode(inode, header, end); + ret = ext4_xattr_check_inode(inode, header, end); if (ret) goto out; @@ -1839,8 +1840,8 @@ ext4_xattr_block_find(struct inode *inode, struct ext4_xattr_info *i, bs->s.first = BFIRST(bs->bh); bs->s.end = bs->bh->b_data + bs->bh->b_size; bs->s.here = bs->s.first; - error = xattr_find_entry(inode, &bs->s.here, bs->s.end, - i->name_index, i->name, 1); + error = ext4_xattr_find_entry(inode, &bs->s.here, bs->s.end, + i->name_index, i->name, 1); if (error && error != -ENODATA) return error; bs->s.not_found = error; @@ -2199,12 +2200,12 @@ int ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i, is->s.here = is->s.first; is->s.end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size; if (ext4_test_inode_state(inode, EXT4_STATE_XATTR)) { - error = xattr_check_inode(inode, header, is->s.end); + error = ext4_xattr_check_inode(inode, header, is->s.end); if (error) return error; /* Find the named attribute. */ - error = xattr_find_entry(inode, &is->s.here, is->s.end, - i->name_index, i->name, 0); + error = ext4_xattr_find_entry(inode, &is->s.here, is->s.end, + i->name_index, i->name, 0); if (error && error != -ENODATA) return error; is->s.not_found = error; @@ -2719,7 +2720,7 @@ int ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize, min_offs = end - base; total_ino = sizeof(struct ext4_xattr_ibody_header) + sizeof(u32); - error = xattr_check_inode(inode, header, end); + error = ext4_xattr_check_inode(inode, header, end); if (error) goto cleanup; -- 2.31.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v3 3/4] ext4: rename xattr_find_entry() and __xattr_check_inode() 2022-12-08 2:32 ` [PATCH v3 3/4] ext4: rename xattr_find_entry() and __xattr_check_inode() Ye Bin @ 2022-12-09 5:38 ` Theodore Ts'o 0 siblings, 0 replies; 9+ messages in thread From: Theodore Ts'o @ 2022-12-09 5:38 UTC (permalink / raw) To: Ye Bin; +Cc: adilger.kernel, linux-ext4, linux-kernel, jack, Ye Bin On Thu, Dec 08, 2022 at 10:32:32AM +0800, Ye Bin wrote: > From: Ye Bin <yebin10@huawei.com> > > Prepend ext4 prefix to function names of xattr_find_entry() and > __xattr_check_inode() for consistency with other functions in ext4 > xattr module. The reason why these function names don't have the ext4 prefix is because functions are static, so there is need to worry about namespace pollution. For static functions, there is no real need to add the ext4 prefix, so why not keep the functions shorter? Yes, there are places where static functions have the ext4 prefix. The main reason why we have changed it is that it's not worth the code churn. Similarly, adding the ext4 prefix is *definitely* not worth the code churn. Cheers, - Ted ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 4/4] ext4: fix inode leak in 'ext4_xattr_inode_create()' 2022-12-08 2:32 [PATCH v3 0/4] Fix two issue about ext4 extended attribute Ye Bin ` (2 preceding siblings ...) 2022-12-08 2:32 ` [PATCH v3 3/4] ext4: rename xattr_find_entry() and __xattr_check_inode() Ye Bin @ 2022-12-08 2:32 ` Ye Bin 2022-12-09 5:39 ` Theodore Ts'o 3 siblings, 1 reply; 9+ messages in thread From: Ye Bin @ 2022-12-08 2:32 UTC (permalink / raw) To: tytso, adilger.kernel, linux-ext4; +Cc: linux-kernel, jack, Ye Bin From: Ye Bin <yebin10@huawei.com> There is issue as follows when do setxattr with inject fault: [localhost]#fsck.ext4 -fn /dev/sda e2fsck 1.46.6-rc1 (12-Sep-2022) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Unattached zero-length inode 15. Clear? no Unattached inode 15 Connect to /lost+found? no Pass 5: Checking group summary information /dev/sda: ********** WARNING: Filesystem still has errors ********** /dev/sda: 15/655360 files (0.0% non-contiguous), 66755/2621440 blocks This occurs in 'ext4_xattr_inode_create()'. If 'ext4_mark_inode_dirty()' fails, dropping i_nlink of the inode is needed. Or will lead to inode leak. Signed-off-by: Ye Bin <yebin10@huawei.com> Reviewed-by: Jan Kara <jack@suse.cz> --- fs/ext4/xattr.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c index 99dacb0393fa..aad7de2e366a 100644 --- a/fs/ext4/xattr.c +++ b/fs/ext4/xattr.c @@ -1442,6 +1442,9 @@ static struct inode *ext4_xattr_inode_create(handle_t *handle, if (!err) err = ext4_inode_attach_jinode(ea_inode); if (err) { + if (ext4_xattr_inode_dec_ref(handle, ea_inode)) + ext4_warning_inode(ea_inode, + "cleanup dec ref error %d", err); iput(ea_inode); return ERR_PTR(err); } -- 2.31.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v3 4/4] ext4: fix inode leak in 'ext4_xattr_inode_create()' 2022-12-08 2:32 ` [PATCH v3 4/4] ext4: fix inode leak in 'ext4_xattr_inode_create()' Ye Bin @ 2022-12-09 5:39 ` Theodore Ts'o 0 siblings, 0 replies; 9+ messages in thread From: Theodore Ts'o @ 2022-12-09 5:39 UTC (permalink / raw) To: Ye Bin; +Cc: adilger.kernel, linux-ext4, linux-kernel, jack, Ye Bin On Thu, Dec 08, 2022 at 10:32:33AM +0800, Ye Bin wrote: > From: Ye Bin <yebin10@huawei.com> > > There is issue as follows when do setxattr with inject fault: > [localhost]#fsck.ext4 -fn /dev/sda > e2fsck 1.46.6-rc1 (12-Sep-2022) > Pass 1: Checking inodes, blocks, and sizes > Pass 2: Checking directory structure > Pass 3: Checking directory connectivity > Pass 4: Checking reference counts > Unattached zero-length inode 15. Clear? no > > Unattached inode 15 > Connect to /lost+found? no > > Pass 5: Checking group summary information > > /dev/sda: ********** WARNING: Filesystem still has errors ********** > > /dev/sda: 15/655360 files (0.0% non-contiguous), 66755/2621440 blocks > > This occurs in 'ext4_xattr_inode_create()'. If 'ext4_mark_inode_dirty()' > fails, dropping i_nlink of the inode is needed. Or will lead to inode leak. > > Signed-off-by: Ye Bin <yebin10@huawei.com> > Reviewed-by: Jan Kara <jack@suse.cz> Applied, thanks. - Ted ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2022-12-09 5:39 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-12-08 2:32 [PATCH v3 0/4] Fix two issue about ext4 extended attribute Ye Bin 2022-12-08 2:32 ` [PATCH v3 1/4] ext4: fix WARNING in ext4_expand_extra_isize_ea Ye Bin 2022-12-09 5:35 ` Theodore Ts'o 2022-12-08 2:32 ` [PATCH v3 2/4] ext4: allocate extended attribute value in vmalloc area Ye Bin 2022-12-09 5:35 ` Theodore Ts'o 2022-12-08 2:32 ` [PATCH v3 3/4] ext4: rename xattr_find_entry() and __xattr_check_inode() Ye Bin 2022-12-09 5:38 ` Theodore Ts'o 2022-12-08 2:32 ` [PATCH v3 4/4] ext4: fix inode leak in 'ext4_xattr_inode_create()' Ye Bin 2022-12-09 5:39 ` Theodore Ts'o
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).