Linux 6.6.73
Greg Kroah-Hartman
maintainerI'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
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -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
@@ -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
@@ -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
@@ -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;