From 253e700f218104a34cefae4cfa8959fdb50d4aa8 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sun, 23 Jul 2023 22:42:35 +0200 Subject: [PATCH] 5.10-stable patches added patches: ext4-correct-inline-offset-when-handling-xattrs-in-inode-body.patch --- ...t-when-handling-xattrs-in-inode-body.patch | 54 +++++++++++++++++++ queue-5.10/series | 1 + 2 files changed, 55 insertions(+) create mode 100644 queue-5.10/ext4-correct-inline-offset-when-handling-xattrs-in-inode-body.patch diff --git a/queue-5.10/ext4-correct-inline-offset-when-handling-xattrs-in-inode-body.patch b/queue-5.10/ext4-correct-inline-offset-when-handling-xattrs-in-inode-body.patch new file mode 100644 index 00000000000..aa037f2a8c2 --- /dev/null +++ b/queue-5.10/ext4-correct-inline-offset-when-handling-xattrs-in-inode-body.patch @@ -0,0 +1,54 @@ +From 6909cf5c4101214f4305a62d582a5b93c7e1eb9a Mon Sep 17 00:00:00 2001 +From: Eric Whitney +Date: Mon, 22 May 2023 14:15:20 -0400 +Subject: ext4: correct inline offset when handling xattrs in inode body + +From: Eric Whitney + +commit 6909cf5c4101214f4305a62d582a5b93c7e1eb9a upstream. + +When run on a file system where the inline_data feature has been +enabled, xfstests generic/269, generic/270, and generic/476 cause ext4 +to emit error messages indicating that inline directory entries are +corrupted. This occurs because the inline offset used to locate +inline directory entries in the inode body is not updated when an +xattr in that shared region is deleted and the region is shifted in +memory to recover the space it occupied. If the deleted xattr precedes +the system.data attribute, which points to the inline directory entries, +that attribute will be moved further up in the region. The inline +offset continues to point to whatever is located in system.data's former +location, with unfortunate effects when used to access directory entries +or (presumably) inline data in the inode body. + +Cc: stable@kernel.org +Signed-off-by: Eric Whitney +Link: https://lore.kernel.org/r/20230522181520.1570360-1-enwlinux@gmail.com +Signed-off-by: Theodore Ts'o +Signed-off-by: Greg Kroah-Hartman +--- + fs/ext4/xattr.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +--- a/fs/ext4/xattr.c ++++ b/fs/ext4/xattr.c +@@ -1725,6 +1725,20 @@ static int ext4_xattr_set_entry(struct e + memmove(here, (void *)here + size, + (void *)last - (void *)here + sizeof(__u32)); + memset(last, 0, size); ++ ++ /* ++ * Update i_inline_off - moved ibody region might contain ++ * system.data attribute. Handling a failure here won't ++ * cause other complications for setting an xattr. ++ */ ++ if (!is_block && ext4_has_inline_data(inode)) { ++ ret = ext4_find_inline_data_nolock(inode); ++ if (ret) { ++ ext4_warning_inode(inode, ++ "unable to update i_inline_off"); ++ goto out; ++ } ++ } + } else if (s->not_found) { + /* Insert new name. */ + size_t size = EXT4_XATTR_LEN(name_len); diff --git a/queue-5.10/series b/queue-5.10/series index b7c4d6b94e5..4c1b743d4a0 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -452,3 +452,4 @@ can-bcm-fix-uaf-in-bcm_proc_show.patch drm-client-fix-memory-leak-in-drm_client_target_cloned.patch drm-client-fix-memory-leak-in-drm_client_modeset_probe.patch asoc-fsl_sai-disable-bit-clock-with-transmitter.patch +ext4-correct-inline-offset-when-handling-xattrs-in-inode-body.patch -- 2.47.3