Skip to contentSkip to conversation

Linux 6.6.73

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages Jan 21, 2025 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 6.6.73 kernel.

Only users of overlayfs need to upgrade, this release reverts some changes that were reported to be causing problems. Thanks to Ignat and Amir for the quick reporting on the issue.

The updated 6.6.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.6.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary

thanks,

greg k-h

------------

 Makefile                 |    2 -
 fs/overlayfs/copy_up.c   |   62 ++++++++++++++++++-----------------------------
 fs/overlayfs/export.c    |   49 ++++++++++++++++---------------------
 fs/overlayfs/namei.c     |   41 ++++++++-----------------------
 fs/overlayfs/overlayfs.h |   28 ++++++---------------
 fs/overlayfs/super.c     |   20 ++++-----------
 fs/overlayfs/util.c      |   10 -------
 7 files changed, 72 insertions(+), 140 deletions(-)

Greg Kroah-Hartman (4):
Revert "ovl: support encoding fid from inode with no alias" Revert "ovl: pass realinode to ovl_encode_real_fh() instead of realdentry" Revert "ovl: do not encode lower fh with upper sb_writers held" Linux 6.6.73

author maintainer
#1 lore raw
Makefile +1 -1
index fb4949cac6ff..2ba627f54590 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 6
 PATCHLEVEL = 6
-SUBLEVEL = 72
+SUBLEVEL = 73
 EXTRAVERSION =
 NAME = Pinguïn Aangedreven
 
fs/overlayfs/copy_up.c +24 -38

164 lines not on this page · raw message

fs/overlayfs/export.c +22 -27

116 lines not on this page · raw message

fs/overlayfs/namei.c +11 -30

100 lines not on this page · raw message

fs/overlayfs/overlayfs.h +8 -20
index ca63a26a6170..09ca82ed0f8c 100644
@@ -632,15 +632,11 @@ struct dentry *ovl_decode_real_fh(struct ovl_fs *ofs, struct ovl_fh *fh,
 int ovl_check_origin_fh(struct ovl_fs *ofs, struct ovl_fh *fh, bool connected,
 			struct dentry *upperdentry, struct ovl_path **stackp);
 int ovl_verify_set_fh(struct ovl_fs *ofs, struct dentry *dentry,
-		      enum ovl_xattr ox, const struct ovl_fh *fh,
-		      bool is_upper, bool set);
-int ovl_verify_origin_xattr(struct ovl_fs *ofs, struct dentry *dentry,
-			    enum ovl_xattr ox, struct dentry *real,
-			    bool is_upper, bool set);
+		      enum ovl_xattr ox, struct dentry *real, bool is_upper,
+		      bool set);
 struct dentry *ovl_index_upper(struct ovl_fs *ofs, struct dentry *index,
 			       bool connected);
 int ovl_verify_index(struct ovl_fs *ofs, struct dentry *index);
-int ovl_get_index_name_fh(const struct ovl_fh *fh, struct qstr *name);
 int ovl_get_index_name(struct ovl_fs *ofs, struct dentry *origin,
 		       struct qstr *name);
 struct dentry *ovl_get_index_fh(struct ovl_fs *ofs, struct ovl_fh *fh);
@@ -652,24 +648,17 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry,
 			  unsigned int flags);
 bool ovl_lower_positive(struct dentry *dentry);
 
-static inline int ovl_verify_origin_fh(struct ovl_fs *ofs, struct dentry *upper,
-				       const struct ovl_fh *fh, bool set)
-{
-	return ovl_verify_set_fh(ofs, upper, OVL_XATTR_ORIGIN, fh, false, set);
-}
-
 static inline int ovl_verify_origin(struct ovl_fs *ofs, struct dentry *upper,
 				    struct dentry *origin, bool set)
 {
-	return ovl_verify_origin_xattr(ofs, upper, OVL_XATTR_ORIGIN, origin,
-				       false, set);
+	return ovl_verify_set_fh(ofs, upper, OVL_XATTR_ORIGIN, origin,
+				 false, set);
 }
 
 static inline int ovl_verify_upper(struct ovl_fs *ofs, struct dentry *index,
 				   struct dentry *upper, bool set)
 {
-	return ovl_verify_origin_xattr(ofs, index, OVL_XATTR_UPPER, upper,
-				       true, set);
+	return ovl_verify_set_fh(ofs, index, OVL_XATTR_UPPER, upper, true, set);
 }
 
 /* readdir.c */
@@ -832,11 +821,10 @@ int ovl_copy_up_with_data(struct dentry *dentry);
 int ovl_maybe_copy_up(struct dentry *dentry, int flags);
 int ovl_copy_xattr(struct super_block *sb, const struct path *path, struct dentry *new);
 int ovl_set_attr(struct ovl_fs *ofs, struct dentry *upper, struct kstat *stat);
-struct ovl_fh *ovl_encode_real_fh(struct ovl_fs *ofs, struct inode *realinode,
+struct ovl_fh *ovl_encode_real_fh(struct ovl_fs *ofs, struct dentry *real,
 				  bool is_upper);
-struct ovl_fh *ovl_get_origin_fh(struct ovl_fs *ofs, struct dentry *origin);
-int ovl_set_origin_fh(struct ovl_fs *ofs, const struct ovl_fh *fh,
-		      struct dentry *upper);
+int ovl_set_origin(struct ovl_fs *ofs, struct dentry *lower,
+		   struct dentry *upper);
 
 /* export.c */
 extern const struct export_operations ovl_export_operations;
fs/overlayfs/super.c +6 -14
index e2574034c3fa..2c056d737c27 100644
@@ -879,20 +879,15 @@ static int ovl_get_indexdir(struct super_block *sb, struct ovl_fs *ofs,
 {
 	struct vfsmount *mnt = ovl_upper_mnt(ofs);
 	struct dentry *indexdir;
-	struct dentry *origin = ovl_lowerstack(oe)->dentry;
-	const struct ovl_fh *fh;
 	int err;
 
-	fh = ovl_get_origin_fh(ofs, origin);
-	if (IS_ERR(fh))
-		return PTR_ERR(fh);
-
 	err = mnt_want_write(mnt);
 	if (err)
-		goto out_free_fh;
+		return err;
 
 	/* Verify lower root is upper root origin */
-	err = ovl_verify_origin_fh(ofs, upperpath->dentry, fh, true);
+	err = ovl_verify_origin(ofs, upperpath->dentry,
+				ovl_lowerstack(oe)->dentry, true);
 	if (err) {
 		pr_err("failed to verify upper root origin\n");
 		goto out;
@@ -924,10 +919,9 @@ static int ovl_get_indexdir(struct super_block *sb, struct ovl_fs *ofs,
 		 * directory entries.
 		 */
 		if (ovl_check_origin_xattr(ofs, ofs->indexdir)) {
-			err = ovl_verify_origin_xattr(ofs, ofs->indexdir,
-						      OVL_XATTR_ORIGIN,
-						      upperpath->dentry, true,
-						      false);
+			err = ovl_verify_set_fh(ofs, ofs->indexdir,
+						OVL_XATTR_ORIGIN,
+						upperpath->dentry, true, false);
 			if (err)
 				pr_err("failed to verify index dir 'origin' xattr\n");
 		}
@@ -945,8 +939,6 @@ static int ovl_get_indexdir(struct super_block *sb, struct ovl_fs *ofs,
 
 out:
 	mnt_drop_write(mnt);
-out_free_fh:
-	kfree(fh);
 	return err;
 }
 
fs/overlayfs/util.c +0 -10
index 4e6b747e0f2e..0bf3ffcd072f 100644
@@ -976,18 +976,12 @@ static void ovl_cleanup_index(struct dentry *dentry)
 	struct dentry *index = NULL;
 	struct inode *inode;
 	struct qstr name = { };
-	bool got_write = false;
 	int err;
 
 	err = ovl_get_index_name(ofs, lowerdentry, &name);
 	if (err)
 		goto fail;
 
-	err = ovl_want_write(dentry);
-	if (err)
-		goto fail;
-
-	got_write = true;
 	inode = d_inode(upperdentry);
 	if (!S_ISDIR(inode->i_mode) && inode->i_nlink != 1) {
 		pr_warn_ratelimited("cleanup linked index (%pd2, ino=%lu, nlink=%u)\n",
@@ -1025,8 +1019,6 @@ static void ovl_cleanup_index(struct dentry *dentry)
 		goto fail;
 
 out:
-	if (got_write)
-		ovl_drop_write(dentry);
 	kfree(name.name);
 	dput(index);
 	return;
@@ -1097,8 +1089,6 @@ void ovl_nlink_end(struct dentry *dentry)
 {
 	struct inode *inode = d_inode(dentry);
 
-	ovl_drop_write(dentry);
-
 	if (ovl_test_flag(OVL_INDEX, inode) && inode->i_nlink == 0) {
 		const struct cred *old_cred;