]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 23 Jul 2023 20:42:32 +0000 (22:42 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 23 Jul 2023 20:42:32 +0000 (22:42 +0200)
added patches:
ext4-correct-inline-offset-when-handling-xattrs-in-inode-body.patch

queue-4.14/ext4-correct-inline-offset-when-handling-xattrs-in-inode-body.patch [new file with mode: 0644]
queue-4.14/series

diff --git a/queue-4.14/ext4-correct-inline-offset-when-handling-xattrs-in-inode-body.patch b/queue-4.14/ext4-correct-inline-offset-when-handling-xattrs-in-inode-body.patch
new file mode 100644 (file)
index 0000000..429892a
--- /dev/null
@@ -0,0 +1,54 @@
+From 6909cf5c4101214f4305a62d582a5b93c7e1eb9a Mon Sep 17 00:00:00 2001
+From: Eric Whitney <enwlinux@gmail.com>
+Date: Mon, 22 May 2023 14:15:20 -0400
+Subject: ext4: correct inline offset when handling xattrs in inode body
+
+From: Eric Whitney <enwlinux@gmail.com>
+
+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 <enwlinux@gmail.com>
+Link: https://lore.kernel.org/r/20230522181520.1570360-1-enwlinux@gmail.com
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/ext4/xattr.c |   14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+--- a/fs/ext4/xattr.c
++++ b/fs/ext4/xattr.c
+@@ -1757,6 +1757,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);
index ec1804098889b797e2250c1a9a35fdc3c0b1918b..b5695a8ccd7ceaa7a432129bd35b39234161980d 100644 (file)
@@ -125,3 +125,4 @@ serial-atmel-don-t-enable-irqs-prematurely.patch
 perf-probe-add-test-for-regression-introduced-by-switch-to-die_get_decl_file.patch
 fuse-revalidate-don-t-invalidate-if-interrupted.patch
 can-bcm-fix-uaf-in-bcm_proc_show.patch
+ext4-correct-inline-offset-when-handling-xattrs-in-inode-body.patch