Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog/updates/2025-01-18-linux-6.6.72-update.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Linux ([6.6.72](https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tag/?h=v6.6.72))
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
DIST linux-6.6.tar.xz 140064536 BLAKE2B 5f02fd8696d42f7ec8c5fbadec8e7270bdcfcb1f9844a6c4db3e1fd461c93ce1ccda650ca72dceb4890ebcbbf768ba8fba0bce91efc49fbd2c307b04e95665f2 SHA512 458b2c34d46206f9b4ccbac54cc57aeca1eaecaf831bc441e59701bac6eadffc17f6ce24af6eadd0454964e843186539ac0d63295ad2cc32d112b60360c39a35
DIST patch-6.6.71.xz 3704792 BLAKE2B 252817fe0f0039f41a76f60d744ad849e863b22ac7cb8ddde9677972d83db9893a13e3d004b24d1c3467e925eae3519604d95314f169eb38c23ab6f2110ec150 SHA512 4c5c68b651e11e7580ed240dea2a26a6b402956eeeae4f9aca7ff0d135481bbd908f5138a6edd05964dc1e7d90d7dbbf32858753d5b7d5afe34d285e65f05089
DIST patch-6.6.72.xz 3729052 BLAKE2B 364a72ede5004a77366aaaf87229d7904d248c4da9d6d837f3e08763b59a8828f44918e12f7e7b03acd448c74d533aa9d2ebe371b9c7841a2ca3806c6acc7cd2 SHA512 b444f212d3923a1270b728737f662a2d009554bdc4b186515de259b64fd8525db4813c0e4b2d1f73908152e506eb4e4be934660b146739cbdbe9e4042a642c92
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,7 @@ UNIPATCH_LIST="
${PATCH_DIR}/z0005-efi-Lock-down-the-kernel-if-booted-in-secure-boot-mo.patch \
${PATCH_DIR}/z0006-mtd-phram-slram-Disable-when-the-kernel-is-locked-do.patch \
${PATCH_DIR}/z0007-arm64-add-kernel-config-option-to-lock-down-when-in-.patch \
${PATCH_DIR}/z0008-Revert-ovl-support-encoding-fid-from-inode-with-no-a.patch \
${PATCH_DIR}/z0009-Revert-ovl-pass-realinode-to-ovl_encode_real_fh-inst.patch \
${PATCH_DIR}/z0010-Revert-ovl-do-not-encode-lower-fh-with-upper-sb_writ.patch \
"
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
From a06cf7407a51a979f7c236ccfc8207e047f336e8 Mon Sep 17 00:00:00 2001
From: Your Name <you@example.com>
Date: Mon, 20 Jan 2025 14:56:26 +0000
Subject: [PATCH 1/3] Revert "ovl: support encoding fid from inode with no
alias"

This reverts commit a1a541fbfa7e97c1100144db34b57553d7164ce5.
---
fs/overlayfs/export.c | 46 ++++++++++++++++++++-----------------------
1 file changed, 21 insertions(+), 25 deletions(-)

diff --git a/fs/overlayfs/export.c b/fs/overlayfs/export.c
index 3a17e4366f28..c56e4e0b8054 100644
--- a/fs/overlayfs/export.c
+++ b/fs/overlayfs/export.c
@@ -181,37 +181,35 @@ static int ovl_connect_layer(struct dentry *dentry)
*
* Return 0 for upper file handle, > 0 for lower file handle or < 0 on error.
*/
-static int ovl_check_encode_origin(struct inode *inode)
+static int ovl_check_encode_origin(struct dentry *dentry)
{
- struct ovl_fs *ofs = OVL_FS(inode->i_sb);
+ struct ovl_fs *ofs = OVL_FS(dentry->d_sb);
bool decodable = ofs->config.nfs_export;
- struct dentry *dentry;
- int err;

/* No upper layer? */
if (!ovl_upper_mnt(ofs))
return 1;

/* Lower file handle for non-upper non-decodable */
- if (!ovl_inode_upper(inode) && !decodable)
+ if (!ovl_dentry_upper(dentry) && !decodable)
return 1;

/* Upper file handle for pure upper */
- if (!ovl_inode_lower(inode))
+ if (!ovl_dentry_lower(dentry))
return 0;

/*
* Root is never indexed, so if there's an upper layer, encode upper for
* root.
*/
- if (inode == d_inode(inode->i_sb->s_root))
+ if (dentry == dentry->d_sb->s_root)
return 0;

/*
* Upper decodable file handle for non-indexed upper.
*/
- if (ovl_inode_upper(inode) && decodable &&
- !ovl_test_flag(OVL_INDEX, inode))
+ if (ovl_dentry_upper(dentry) && decodable &&
+ !ovl_test_flag(OVL_INDEX, d_inode(dentry)))
return 0;

/*
@@ -220,25 +218,17 @@ static int ovl_check_encode_origin(struct inode *inode)
* ovl_connect_layer() will try to make origin's layer "connected" by
* copying up a "connectable" ancestor.
*/
- if (!decodable || !S_ISDIR(inode->i_mode))
- return 1;
-
- dentry = d_find_any_alias(inode);
- if (!dentry)
- return -ENOENT;
-
- err = ovl_connect_layer(dentry);
- dput(dentry);
- if (err < 0)
- return err;
+ if (d_is_dir(dentry) && decodable)
+ return ovl_connect_layer(dentry);

/* Lower file handle for indexed and non-upper dir/non-dir */
return 1;
}

-static int ovl_dentry_to_fid(struct ovl_fs *ofs, struct inode *inode,
+static int ovl_dentry_to_fid(struct ovl_fs *ofs, struct dentry *dentry,
u32 *fid, int buflen)
{
+ struct inode *inode = d_inode(dentry);
struct ovl_fh *fh = NULL;
int err, enc_lower;
int len;
@@ -247,7 +237,7 @@ static int ovl_dentry_to_fid(struct ovl_fs *ofs, struct inode *inode,
* Check if we should encode a lower or upper file handle and maybe
* copy up an ancestor to make lower file handle connectable.
*/
- err = enc_lower = ovl_check_encode_origin(inode);
+ err = enc_lower = ovl_check_encode_origin(dentry);
if (enc_lower < 0)
goto fail;

@@ -267,8 +257,8 @@ static int ovl_dentry_to_fid(struct ovl_fs *ofs, struct inode *inode,
return err;

fail:
- pr_warn_ratelimited("failed to encode file handle (ino=%lu, err=%i)\n",
- inode->i_ino, err);
+ pr_warn_ratelimited("failed to encode file handle (%pd2, err=%i)\n",
+ dentry, err);
goto out;
}

@@ -276,13 +266,19 @@ static int ovl_encode_fh(struct inode *inode, u32 *fid, int *max_len,
struct inode *parent)
{
struct ovl_fs *ofs = OVL_FS(inode->i_sb);
+ struct dentry *dentry;
int bytes, buflen = *max_len << 2;

/* TODO: encode connectable file handles */
if (parent)
return FILEID_INVALID;

- bytes = ovl_dentry_to_fid(ofs, inode, fid, buflen);
+ dentry = d_find_any_alias(inode);
+ if (!dentry)
+ return FILEID_INVALID;
+
+ bytes = ovl_dentry_to_fid(ofs, dentry, fid, buflen);
+ dput(dentry);
if (bytes <= 0)
return FILEID_INVALID;

--
2.34.1

Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
From 854426daee2f0a3f365d8a9236a6dd524fd563de Mon Sep 17 00:00:00 2001
From: Your Name <you@example.com>
Date: Mon, 20 Jan 2025 14:56:34 +0000
Subject: [PATCH 2/3] Revert "ovl: pass realinode to ovl_encode_real_fh()
instead of realdentry"

This reverts commit a3f8a2b13a277d942c810d2ccc654d5bc824a430.
---
fs/overlayfs/copy_up.c | 11 +++++------
fs/overlayfs/export.c | 5 ++---
fs/overlayfs/namei.c | 4 ++--
fs/overlayfs/overlayfs.h | 2 +-
4 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
index f14c412c5609..5c9af24bae4a 100644
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -371,13 +371,13 @@ int ovl_set_attr(struct ovl_fs *ofs, struct dentry *upperdentry,
return err;
}

-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 *fh;
int fh_type, dwords;
int buflen = MAX_HANDLE_SZ;
- uuid_t *uuid = &realinode->i_sb->s_uuid;
+ uuid_t *uuid = &real->d_sb->s_uuid;
int err;

/* Make sure the real fid stays 32bit aligned */
@@ -394,8 +394,7 @@ struct ovl_fh *ovl_encode_real_fh(struct ovl_fs *ofs, struct inode *realinode,
* the price or reconnecting the dentry.
*/
dwords = buflen >> 2;
- fh_type = exportfs_encode_inode_fh(realinode, (void *)fh->fb.fid,
- &dwords, NULL, 0);
+ fh_type = exportfs_encode_fh(real, (void *)fh->fb.fid, &dwords, 0);
buflen = (dwords << 2);

err = -EIO;
@@ -437,7 +436,7 @@ struct ovl_fh *ovl_get_origin_fh(struct ovl_fs *ofs, struct dentry *origin)
if (!ovl_can_decode_fh(origin->d_sb))
return NULL;

- return ovl_encode_real_fh(ofs, d_inode(origin), false);
+ return ovl_encode_real_fh(ofs, origin, false);
}

int ovl_set_origin_fh(struct ovl_fs *ofs, const struct ovl_fh *fh,
@@ -462,7 +461,7 @@ static int ovl_set_upper_fh(struct ovl_fs *ofs, struct dentry *upper,
const struct ovl_fh *fh;
int err;

- fh = ovl_encode_real_fh(ofs, d_inode(upper), true);
+ fh = ovl_encode_real_fh(ofs, upper, true);
if (IS_ERR(fh))
return PTR_ERR(fh);

diff --git a/fs/overlayfs/export.c b/fs/overlayfs/export.c
index c56e4e0b8054..611ff567a1aa 100644
--- a/fs/overlayfs/export.c
+++ b/fs/overlayfs/export.c
@@ -228,7 +228,6 @@ static int ovl_check_encode_origin(struct dentry *dentry)
static int ovl_dentry_to_fid(struct ovl_fs *ofs, struct dentry *dentry,
u32 *fid, int buflen)
{
- struct inode *inode = d_inode(dentry);
struct ovl_fh *fh = NULL;
int err, enc_lower;
int len;
@@ -242,8 +241,8 @@ static int ovl_dentry_to_fid(struct ovl_fs *ofs, struct dentry *dentry,
goto fail;

/* Encode an upper or lower file handle */
- fh = ovl_encode_real_fh(ofs, enc_lower ? ovl_inode_lower(inode) :
- ovl_inode_upper(inode), !enc_lower);
+ fh = ovl_encode_real_fh(ofs, enc_lower ? ovl_dentry_lower(dentry) :
+ ovl_dentry_upper(dentry), !enc_lower);
if (IS_ERR(fh))
return PTR_ERR(fh);

diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c
index 2d2ef671b36b..f10ac4ae35f0 100644
--- a/fs/overlayfs/namei.c
+++ b/fs/overlayfs/namei.c
@@ -536,7 +536,7 @@ int ovl_verify_origin_xattr(struct ovl_fs *ofs, struct dentry *dentry,
struct ovl_fh *fh;
int err;

- fh = ovl_encode_real_fh(ofs, d_inode(real), is_upper);
+ fh = ovl_encode_real_fh(ofs, real, is_upper);
err = PTR_ERR(fh);
if (IS_ERR(fh)) {
fh = NULL;
@@ -732,7 +732,7 @@ int ovl_get_index_name(struct ovl_fs *ofs, struct dentry *origin,
struct ovl_fh *fh;
int err;

- fh = ovl_encode_real_fh(ofs, d_inode(origin), false);
+ fh = ovl_encode_real_fh(ofs, origin, false);
if (IS_ERR(fh))
return PTR_ERR(fh);

diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h
index ca63a26a6170..61e03d664d7d 100644
--- a/fs/overlayfs/overlayfs.h
+++ b/fs/overlayfs/overlayfs.h
@@ -832,7 +832,7 @@ 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,
--
2.34.1

Loading
Loading