Commit 440b003
ext4: guard against EA inode refcount underflow in xattr update
commit 57295e835408d8d425bef58da5253465db3d6888 upstream.
syzkaller found a path where ext4_xattr_inode_update_ref() reads an EA
inode refcount that is already <= 0 and then applies ref_change (often
-1). That lets the refcount underflow and we proceed with a bogus value,
triggering errors like:
EXT4-fs error: EA inode <n> ref underflow: ref_count=-1 ref_change=-1
EXT4-fs warning: ea_inode dec ref err=-117
Make the invariant explicit: if the current refcount is non-positive,
treat this as on-disk corruption, emit ext4_error_inode(), and fail the
operation with -EFSCORRUPTED instead of updating the refcount. Delete the
WARN_ONCE() as negative refcounts are now impossible; keep error reporting
in ext4_error_inode().
This prevents the underflow and the follow-on orphan/cleanup churn.
Reported-by: [email protected]
Fixes: https://syzbot.org/bug?extid=0be4f339a8218d2a5bb1
Cc: [email protected]
Co-developed-by: Albin Babu Varghese <[email protected]>
Signed-off-by: Albin Babu Varghese <[email protected]>
Signed-off-by: Ahmet Eray Karadag <[email protected]>
Message-ID: <[email protected]>
Signed-off-by: Theodore Ts'o <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>1 parent 3fb2b75 commit 440b003
1 file changed
Lines changed: 8 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1019 | 1019 | | |
1020 | 1020 | | |
1021 | 1021 | | |
1022 | | - | |
| 1022 | + | |
1023 | 1023 | | |
1024 | 1024 | | |
1025 | 1025 | | |
| |||
1029 | 1029 | | |
1030 | 1030 | | |
1031 | 1031 | | |
| 1032 | + | |
| 1033 | + | |
| 1034 | + | |
| 1035 | + | |
| 1036 | + | |
| 1037 | + | |
| 1038 | + | |
1032 | 1039 | | |
1033 | 1040 | | |
1034 | 1041 | | |
1035 | 1042 | | |
1036 | | - | |
1037 | | - | |
1038 | | - | |
1039 | 1043 | | |
1040 | 1044 | | |
1041 | 1045 | | |
| |||
1044 | 1048 | | |
1045 | 1049 | | |
1046 | 1050 | | |
1047 | | - | |
1048 | | - | |
1049 | | - | |
1050 | 1051 | | |
1051 | 1052 | | |
1052 | 1053 | | |
| |||
0 commit comments