]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 6.6
authorSasha Levin <sashal@kernel.org>
Sun, 3 Nov 2024 00:30:50 +0000 (20:30 -0400)
committerSasha Levin <sashal@kernel.org>
Sun, 3 Nov 2024 00:30:50 +0000 (20:30 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
18 files changed:
queue-6.6/cifs-fix-creating-native-symlinks-pointing-to-curren.patch [new file with mode: 0644]
queue-6.6/cifs-improve-creating-native-symlinks-pointing-to-di.patch [new file with mode: 0644]
queue-6.6/fs-ntfs3-add-rough-attr-alloc_size-check.patch [new file with mode: 0644]
queue-6.6/fs-ntfs3-additional-check-in-ni_clear.patch [new file with mode: 0644]
queue-6.6/fs-ntfs3-additional-check-in-ntfs_file_release.patch [new file with mode: 0644]
queue-6.6/fs-ntfs3-check-if-more-than-chunk-size-bytes-are-wri.patch [new file with mode: 0644]
queue-6.6/fs-ntfs3-fix-general-protection-fault-in-run_is_mapp.patch [new file with mode: 0644]
queue-6.6/fs-ntfs3-fix-possible-deadlock-in-mi_read.patch [new file with mode: 0644]
queue-6.6/fs-ntfs3-fix-warning-possible-deadlock-in-ntfs_set_s.patch [new file with mode: 0644]
queue-6.6/fs-ntfs3-stale-inode-instead-of-bad.patch [new file with mode: 0644]
queue-6.6/misc-sgi-gru-don-t-disable-preemption-in-gru-driver.patch [new file with mode: 0644]
queue-6.6/net-amd-mvme147-fix-probe-banner-message.patch [new file with mode: 0644]
queue-6.6/nfs-remove-revoked-delegation-from-server-s-delegati.patch [new file with mode: 0644]
queue-6.6/ntfs3-add-bounds-checking-to-mi_enum_attr.patch [new file with mode: 0644]
queue-6.6/scsi-scsi_transport_fc-allow-setting-rport-state-to-.patch [new file with mode: 0644]
queue-6.6/series
queue-6.6/thermal-intel-int340x-processor-add-mmio-rapl-pl4-su.patch [new file with mode: 0644]
queue-6.6/thermal-intel-int340x-processor-remove-mmio-rapl-cpu.patch [new file with mode: 0644]

diff --git a/queue-6.6/cifs-fix-creating-native-symlinks-pointing-to-curren.patch b/queue-6.6/cifs-fix-creating-native-symlinks-pointing-to-curren.patch
new file mode 100644 (file)
index 0000000..56a4b2b
--- /dev/null
@@ -0,0 +1,69 @@
+From c82e806b8821b95ec1c67f91ac3eb0a17fdf55a6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 5 Oct 2024 16:02:56 +0200
+Subject: cifs: Fix creating native symlinks pointing to current or parent
+ directory
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Pali Rohár <pali@kernel.org>
+
+[ Upstream commit 63271b7d569fbe924bccc7dadc17d3d07a4e5f7a ]
+
+Calling 'ln -s . symlink' or 'ln -s .. symlink' creates symlink pointing to
+some object name which ends with U+F029 unicode codepoint. This is because
+trailing dot in the object name is replaced by non-ASCII unicode codepoint.
+
+So Linux SMB client currently is not able to create native symlink pointing
+to current or parent directory on Windows SMB server which can be read by
+either on local Windows server or by any other SMB client which does not
+implement compatible-reverse character replacement.
+
+Fix this problem in cifsConvertToUTF16() function which is doing that
+character replacement. Function comment already says that it does not need
+to handle special cases '.' and '..', but after introduction of native
+symlinks in reparse point form, this handling is needed.
+
+Note that this change depends on the previous change
+"cifs: Improve creating native symlinks pointing to directory".
+
+Signed-off-by: Pali Rohár <pali@kernel.org>
+Signed-off-by: Steve French <stfrench@microsoft.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/smb/client/cifs_unicode.c | 17 ++++++++++++++---
+ 1 file changed, 14 insertions(+), 3 deletions(-)
+
+diff --git a/fs/smb/client/cifs_unicode.c b/fs/smb/client/cifs_unicode.c
+index 79d99a9139441..4cc6e0896fad3 100644
+--- a/fs/smb/client/cifs_unicode.c
++++ b/fs/smb/client/cifs_unicode.c
+@@ -484,10 +484,21 @@ cifsConvertToUTF16(__le16 *target, const char *source, int srclen,
+                       /**
+                        * Remap spaces and periods found at the end of every
+                        * component of the path. The special cases of '.' and
+-                       * '..' do not need to be dealt with explicitly because
+-                       * they are addressed in namei.c:link_path_walk().
++                       * '..' are need to be handled because of symlinks.
++                       * They are treated as non-end-of-string to avoid
++                       * remapping and breaking symlinks pointing to . or ..
+                        **/
+-                      if ((i == srclen - 1) || (source[i+1] == '\\'))
++                      if ((i == 0 || source[i-1] == '\\') &&
++                          source[i] == '.' &&
++                          (i == srclen-1 || source[i+1] == '\\'))
++                              end_of_string = false; /* "." case */
++                      else if (i >= 1 &&
++                               (i == 1 || source[i-2] == '\\') &&
++                               source[i-1] == '.' &&
++                               source[i] == '.' &&
++                               (i == srclen-1 || source[i+1] == '\\'))
++                              end_of_string = false; /* ".." case */
++                      else if ((i == srclen - 1) || (source[i+1] == '\\'))
+                               end_of_string = true;
+                       else
+                               end_of_string = false;
+-- 
+2.43.0
+
diff --git a/queue-6.6/cifs-improve-creating-native-symlinks-pointing-to-di.patch b/queue-6.6/cifs-improve-creating-native-symlinks-pointing-to-di.patch
new file mode 100644 (file)
index 0000000..10f9362
--- /dev/null
@@ -0,0 +1,300 @@
+From 23315f55aa4b6f772da2598516612d8cd8dd5dc8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 5 Oct 2024 16:02:55 +0200
+Subject: cifs: Improve creating native symlinks pointing to directory
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Pali Rohár <pali@kernel.org>
+
+[ Upstream commit 3eb40512530e4f64f819d8e723b6f41695dace5a ]
+
+SMB protocol for native symlinks distinguish between symlink to directory
+and symlink to file. These two symlink types cannot be exchanged, which
+means that symlink of file type pointing to directory cannot be resolved at
+all (and vice-versa).
+
+Windows follows this rule for local filesystems (NTFS) and also for SMB.
+
+Linux SMB client currenly creates all native symlinks of file type. Which
+means that Windows (and some other SMB clients) cannot resolve symlinks
+pointing to directory created by Linux SMB client.
+
+As Linux system does not distinguish between directory and file symlinks,
+its API does not provide enough information for Linux SMB client during
+creating of native symlinks.
+
+Add some heuristic into the Linux SMB client for choosing the correct
+symlink type during symlink creation. Check if the symlink target location
+ends with slash, or last path component is dot or dot-dot, and check if the
+target location on SMB share exists and is a directory. If at least one
+condition is truth then create a new SMB symlink of directory type.
+Otherwise create it as file type symlink.
+
+This change improves interoperability with Windows systems. Windows systems
+would be able to resolve more SMB symlinks created by Linux SMB client
+which points to existing directory.
+
+Signed-off-by: Pali Rohár <pali@kernel.org>
+Signed-off-by: Steve French <stfrench@microsoft.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/smb/client/reparse.c   | 164 +++++++++++++++++++++++++++++++++++++-
+ fs/smb/client/smb2inode.c |   3 +-
+ fs/smb/client/smb2proto.h |   1 +
+ 3 files changed, 164 insertions(+), 4 deletions(-)
+
+diff --git a/fs/smb/client/reparse.c b/fs/smb/client/reparse.c
+index c848b5e88d32f..74abbdf5026c7 100644
+--- a/fs/smb/client/reparse.c
++++ b/fs/smb/client/reparse.c
+@@ -14,6 +14,12 @@
+ #include "fs_context.h"
+ #include "reparse.h"
++static int detect_directory_symlink_target(struct cifs_sb_info *cifs_sb,
++                                         const unsigned int xid,
++                                         const char *full_path,
++                                         const char *symname,
++                                         bool *directory);
++
+ int smb2_create_reparse_symlink(const unsigned int xid, struct inode *inode,
+                               struct dentry *dentry, struct cifs_tcon *tcon,
+                               const char *full_path, const char *symname)
+@@ -24,6 +30,7 @@ int smb2_create_reparse_symlink(const unsigned int xid, struct inode *inode,
+       struct inode *new;
+       struct kvec iov;
+       __le16 *path;
++      bool directory;
+       char *sym, sep = CIFS_DIR_SEP(cifs_sb);
+       u16 len, plen;
+       int rc = 0;
+@@ -45,6 +52,18 @@ int smb2_create_reparse_symlink(const unsigned int xid, struct inode *inode,
+               goto out;
+       }
++      /*
++       * SMB distinguish between symlink to directory and symlink to file.
++       * They cannot be exchanged (symlink of file type which points to
++       * directory cannot be resolved and vice-versa). Try to detect if
++       * the symlink target could be a directory or not. When detection
++       * fails then treat symlink as a file (non-directory) symlink.
++       */
++      directory = false;
++      rc = detect_directory_symlink_target(cifs_sb, xid, full_path, symname, &directory);
++      if (rc < 0)
++              goto out;
++
+       plen = 2 * UniStrnlen((wchar_t *)path, PATH_MAX);
+       len = sizeof(*buf) + plen * 2;
+       buf = kzalloc(len, GFP_KERNEL);
+@@ -69,7 +88,8 @@ int smb2_create_reparse_symlink(const unsigned int xid, struct inode *inode,
+       iov.iov_base = buf;
+       iov.iov_len = len;
+       new = smb2_get_reparse_inode(&data, inode->i_sb, xid,
+-                                   tcon, full_path, &iov, NULL);
++                                   tcon, full_path, directory,
++                                   &iov, NULL);
+       if (!IS_ERR(new))
+               d_instantiate(dentry, new);
+       else
+@@ -81,6 +101,144 @@ int smb2_create_reparse_symlink(const unsigned int xid, struct inode *inode,
+       return rc;
+ }
++static int detect_directory_symlink_target(struct cifs_sb_info *cifs_sb,
++                                         const unsigned int xid,
++                                         const char *full_path,
++                                         const char *symname,
++                                         bool *directory)
++{
++      char sep = CIFS_DIR_SEP(cifs_sb);
++      struct cifs_open_parms oparms;
++      struct tcon_link *tlink;
++      struct cifs_tcon *tcon;
++      const char *basename;
++      struct cifs_fid fid;
++      char *resolved_path;
++      int full_path_len;
++      int basename_len;
++      int symname_len;
++      char *path_sep;
++      __u32 oplock;
++      int open_rc;
++
++      /*
++       * First do some simple check. If the original Linux symlink target ends
++       * with slash, or last path component is dot or dot-dot then it is for
++       * sure symlink to the directory.
++       */
++      basename = kbasename(symname);
++      basename_len = strlen(basename);
++      if (basename_len == 0 || /* symname ends with slash */
++          (basename_len == 1 && basename[0] == '.') || /* last component is "." */
++          (basename_len == 2 && basename[0] == '.' && basename[1] == '.')) { /* or ".." */
++              *directory = true;
++              return 0;
++      }
++
++      /*
++       * For absolute symlinks it is not possible to determinate
++       * if it should point to directory or file.
++       */
++      if (symname[0] == '/') {
++              cifs_dbg(FYI,
++                       "%s: cannot determinate if the symlink target path '%s' "
++                       "is directory or not, creating '%s' as file symlink\n",
++                       __func__, symname, full_path);
++              return 0;
++      }
++
++      /*
++       * If it was not detected as directory yet and the symlink is relative
++       * then try to resolve the path on the SMB server, check if the path
++       * exists and determinate if it is a directory or not.
++       */
++
++      full_path_len = strlen(full_path);
++      symname_len = strlen(symname);
++
++      tlink = cifs_sb_tlink(cifs_sb);
++      if (IS_ERR(tlink))
++              return PTR_ERR(tlink);
++
++      resolved_path = kzalloc(full_path_len + symname_len + 1, GFP_KERNEL);
++      if (!resolved_path) {
++              cifs_put_tlink(tlink);
++              return -ENOMEM;
++      }
++
++      /*
++       * Compose the resolved SMB symlink path from the SMB full path
++       * and Linux target symlink path.
++       */
++      memcpy(resolved_path, full_path, full_path_len+1);
++      path_sep = strrchr(resolved_path, sep);
++      if (path_sep)
++              path_sep++;
++      else
++              path_sep = resolved_path;
++      memcpy(path_sep, symname, symname_len+1);
++      if (sep == '\\')
++              convert_delimiter(path_sep, sep);
++
++      tcon = tlink_tcon(tlink);
++      oparms = CIFS_OPARMS(cifs_sb, tcon, resolved_path,
++                           FILE_READ_ATTRIBUTES, FILE_OPEN, 0, ACL_NO_MODE);
++      oparms.fid = &fid;
++
++      /* Try to open as a directory (NOT_FILE) */
++      oplock = 0;
++      oparms.create_options = cifs_create_options(cifs_sb,
++                                                  CREATE_NOT_FILE | OPEN_REPARSE_POINT);
++      open_rc = tcon->ses->server->ops->open(xid, &oparms, &oplock, NULL);
++      if (open_rc == 0) {
++              /* Successful open means that the target path is definitely a directory. */
++              *directory = true;
++              tcon->ses->server->ops->close(xid, tcon, &fid);
++      } else if (open_rc == -ENOTDIR) {
++              /* -ENOTDIR means that the target path is definitely a file. */
++              *directory = false;
++      } else if (open_rc == -ENOENT) {
++              /* -ENOENT means that the target path does not exist. */
++              cifs_dbg(FYI,
++                       "%s: symlink target path '%s' does not exist, "
++                       "creating '%s' as file symlink\n",
++                       __func__, symname, full_path);
++      } else {
++              /* Try to open as a file (NOT_DIR) */
++              oplock = 0;
++              oparms.create_options = cifs_create_options(cifs_sb,
++                                                          CREATE_NOT_DIR | OPEN_REPARSE_POINT);
++              open_rc = tcon->ses->server->ops->open(xid, &oparms, &oplock, NULL);
++              if (open_rc == 0) {
++                      /* Successful open means that the target path is definitely a file. */
++                      *directory = false;
++                      tcon->ses->server->ops->close(xid, tcon, &fid);
++              } else if (open_rc == -EISDIR) {
++                      /* -EISDIR means that the target path is definitely a directory. */
++                      *directory = true;
++              } else {
++                      /*
++                       * This code branch is called when we do not have a permission to
++                       * open the resolved_path or some other client/process denied
++                       * opening the resolved_path.
++                       *
++                       * TODO: Try to use ops->query_dir_first on the parent directory
++                       * of resolved_path, search for basename of resolved_path and
++                       * check if the ATTR_DIRECTORY is set in fi.Attributes. In some
++                       * case this could work also when opening of the path is denied.
++                       */
++                      cifs_dbg(FYI,
++                               "%s: cannot determinate if the symlink target path '%s' "
++                               "is directory or not, creating '%s' as file symlink\n",
++                               __func__, symname, full_path);
++              }
++      }
++
++      kfree(resolved_path);
++      cifs_put_tlink(tlink);
++      return 0;
++}
++
+ static int nfs_set_reparse_buf(struct reparse_posix_data *buf,
+                              mode_t mode, dev_t dev,
+                              struct kvec *iov)
+@@ -137,7 +295,7 @@ static int mknod_nfs(unsigned int xid, struct inode *inode,
+       };
+       new = smb2_get_reparse_inode(&data, inode->i_sb, xid,
+-                                   tcon, full_path, &iov, NULL);
++                                   tcon, full_path, false, &iov, NULL);
+       if (!IS_ERR(new))
+               d_instantiate(dentry, new);
+       else
+@@ -283,7 +441,7 @@ static int mknod_wsl(unsigned int xid, struct inode *inode,
+       data.wsl.eas_len = len;
+       new = smb2_get_reparse_inode(&data, inode->i_sb,
+-                                   xid, tcon, full_path,
++                                   xid, tcon, full_path, false,
+                                    &reparse_iov, &xattr_iov);
+       if (!IS_ERR(new))
+               d_instantiate(dentry, new);
+diff --git a/fs/smb/client/smb2inode.c b/fs/smb/client/smb2inode.c
+index 8010b3ed4b3fe..daa841dfbadcf 100644
+--- a/fs/smb/client/smb2inode.c
++++ b/fs/smb/client/smb2inode.c
+@@ -1198,6 +1198,7 @@ struct inode *smb2_get_reparse_inode(struct cifs_open_info_data *data,
+                                    const unsigned int xid,
+                                    struct cifs_tcon *tcon,
+                                    const char *full_path,
++                                   bool directory,
+                                    struct kvec *reparse_iov,
+                                    struct kvec *xattr_iov)
+ {
+@@ -1217,7 +1218,7 @@ struct inode *smb2_get_reparse_inode(struct cifs_open_info_data *data,
+                            FILE_READ_ATTRIBUTES |
+                            FILE_WRITE_ATTRIBUTES,
+                            FILE_CREATE,
+-                           CREATE_NOT_DIR | OPEN_REPARSE_POINT,
++                           (directory ? CREATE_NOT_FILE : CREATE_NOT_DIR) | OPEN_REPARSE_POINT,
+                            ACL_NO_MODE);
+       if (xattr_iov)
+               oparms.ea_cctx = xattr_iov;
+diff --git a/fs/smb/client/smb2proto.h b/fs/smb/client/smb2proto.h
+index 732169d8a67a3..f6fafa997e991 100644
+--- a/fs/smb/client/smb2proto.h
++++ b/fs/smb/client/smb2proto.h
+@@ -61,6 +61,7 @@ struct inode *smb2_get_reparse_inode(struct cifs_open_info_data *data,
+                                    const unsigned int xid,
+                                    struct cifs_tcon *tcon,
+                                    const char *full_path,
++                                   bool directory,
+                                    struct kvec *reparse_iov,
+                                    struct kvec *xattr_iov);
+ int smb2_query_reparse_point(const unsigned int xid,
+-- 
+2.43.0
+
diff --git a/queue-6.6/fs-ntfs3-add-rough-attr-alloc_size-check.patch b/queue-6.6/fs-ntfs3-add-rough-attr-alloc_size-check.patch
new file mode 100644 (file)
index 0000000..e5d918d
--- /dev/null
@@ -0,0 +1,33 @@
+From a5079de831913f71d3cdbca3d34cc52d0dbae670 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 19 Aug 2024 16:26:59 +0300
+Subject: fs/ntfs3: Add rough attr alloc_size check
+
+From: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
+
+[ Upstream commit c4a8ba334262e9a5c158d618a4820e1b9c12495c ]
+
+Reported-by: syzbot+c6d94bedd910a8216d25@syzkaller.appspotmail.com
+Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ntfs3/record.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/fs/ntfs3/record.c b/fs/ntfs3/record.c
+index 2a375247b3c09..427c71be0f087 100644
+--- a/fs/ntfs3/record.c
++++ b/fs/ntfs3/record.c
+@@ -331,6 +331,9 @@ struct ATTRIB *mi_enum_attr(struct mft_inode *mi, struct ATTRIB *attr)
+               if (attr->nres.c_unit)
+                       return NULL;
++
++              if (alloc_size > mi->sbi->volume.size)
++                      return NULL;
+       }
+       return attr;
+-- 
+2.43.0
+
diff --git a/queue-6.6/fs-ntfs3-additional-check-in-ni_clear.patch b/queue-6.6/fs-ntfs3-additional-check-in-ni_clear.patch
new file mode 100644 (file)
index 0000000..a6272eb
--- /dev/null
@@ -0,0 +1,37 @@
+From 912d058518b634d99882c7c272cc596e4973d130 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 9 Sep 2024 15:39:10 +0300
+Subject: fs/ntfs3: Additional check in ni_clear()
+
+From: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
+
+[ Upstream commit d178944db36b3369b78a08ba520de109b89bf2a9 ]
+
+Checking of NTFS_FLAGS_LOG_REPLAYING added to prevent access to
+uninitialized bitmap during replay process.
+
+Reported-by: syzbot+3bfd2cc059ab93efcdb4@syzkaller.appspotmail.com
+Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ntfs3/frecord.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/fs/ntfs3/frecord.c b/fs/ntfs3/frecord.c
+index 61055bcfe8277..12e03feb3074a 100644
+--- a/fs/ntfs3/frecord.c
++++ b/fs/ntfs3/frecord.c
+@@ -102,7 +102,9 @@ void ni_clear(struct ntfs_inode *ni)
+ {
+       struct rb_node *node;
+-      if (!ni->vfs_inode.i_nlink && ni->mi.mrec && is_rec_inuse(ni->mi.mrec))
++      if (!ni->vfs_inode.i_nlink && ni->mi.mrec &&
++          is_rec_inuse(ni->mi.mrec) &&
++          !(ni->mi.sbi->flags & NTFS_FLAGS_LOG_REPLAYING))
+               ni_delete_all(ni);
+       al_destroy(ni);
+-- 
+2.43.0
+
diff --git a/queue-6.6/fs-ntfs3-additional-check-in-ntfs_file_release.patch b/queue-6.6/fs-ntfs3-additional-check-in-ntfs_file_release.patch
new file mode 100644 (file)
index 0000000..316db17
--- /dev/null
@@ -0,0 +1,39 @@
+From 3933e2d2f4c7f890cb64de35ff36be16beeae656 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 4 Sep 2024 12:57:31 +0300
+Subject: fs/ntfs3: Additional check in ntfs_file_release
+
+From: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
+
+[ Upstream commit 031d6f608290c847ba6378322d0986d08d1a645a ]
+
+Reported-by: syzbot+8c652f14a0fde76ff11d@syzkaller.appspotmail.com
+Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ntfs3/file.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/fs/ntfs3/file.c b/fs/ntfs3/file.c
+index f14d21b6c6d39..2ecd0303f9421 100644
+--- a/fs/ntfs3/file.c
++++ b/fs/ntfs3/file.c
+@@ -1173,7 +1173,14 @@ static int ntfs_file_release(struct inode *inode, struct file *file)
+       /* If we are last writer on the inode, drop the block reservation. */
+       if (sbi->options->prealloc &&
+           ((file->f_mode & FMODE_WRITE) &&
+-           atomic_read(&inode->i_writecount) == 1)) {
++           atomic_read(&inode->i_writecount) == 1)
++         /*
++          * The only file when inode->i_fop = &ntfs_file_operations and
++          * init_rwsem(&ni->file.run_lock) is not called explicitly is MFT.
++          *
++          * Add additional check here.
++          */
++          && inode->i_ino != MFT_REC_MFT) {
+               ni_lock(ni);
+               down_write(&ni->file.run_lock);
+-- 
+2.43.0
+
diff --git a/queue-6.6/fs-ntfs3-check-if-more-than-chunk-size-bytes-are-wri.patch b/queue-6.6/fs-ntfs3-check-if-more-than-chunk-size-bytes-are-wri.patch
new file mode 100644 (file)
index 0000000..0b4daba
--- /dev/null
@@ -0,0 +1,37 @@
+From 4c60e5e9d5092d338f6d423fc95f772297eedebb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 15 May 2024 07:38:33 -0500
+Subject: fs/ntfs3: Check if more than chunk-size bytes are written
+
+From: Andrew Ballance <andrewjballance@gmail.com>
+
+[ Upstream commit 9931122d04c6d431b2c11b5bb7b10f28584067f0 ]
+
+A incorrectly formatted chunk may decompress into
+more than LZNT_CHUNK_SIZE bytes and a index out of bounds
+will occur in s_max_off.
+
+Signed-off-by: Andrew Ballance <andrewjballance@gmail.com>
+Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ntfs3/lznt.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/fs/ntfs3/lznt.c b/fs/ntfs3/lznt.c
+index 4aae598d6d884..fdc9b2ebf3410 100644
+--- a/fs/ntfs3/lznt.c
++++ b/fs/ntfs3/lznt.c
+@@ -236,6 +236,9 @@ static inline ssize_t decompress_chunk(u8 *unc, u8 *unc_end, const u8 *cmpr,
+       /* Do decompression until pointers are inside range. */
+       while (up < unc_end && cmpr < cmpr_end) {
++              // return err if more than LZNT_CHUNK_SIZE bytes are written
++              if (up - unc > LZNT_CHUNK_SIZE)
++                      return -EINVAL;
+               /* Correct index */
+               while (unc + s_max_off[index] < up)
+                       index += 1;
+-- 
+2.43.0
+
diff --git a/queue-6.6/fs-ntfs3-fix-general-protection-fault-in-run_is_mapp.patch b/queue-6.6/fs-ntfs3-fix-general-protection-fault-in-run_is_mapp.patch
new file mode 100644 (file)
index 0000000..9b5bd79
--- /dev/null
@@ -0,0 +1,38 @@
+From 80ca6990a5e6f2dbd4b407b0a3d18c3b67d518c0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 30 Aug 2024 13:50:18 +0300
+Subject: fs/ntfs3: Fix general protection fault in run_is_mapped_full
+
+From: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
+
+[ Upstream commit a33fb016e49e37aafab18dc3c8314d6399cb4727 ]
+
+Fixed deleating of a non-resident attribute in ntfs_create_inode()
+rollback.
+
+Reported-by: syzbot+9af29acd8f27fbce94bc@syzkaller.appspotmail.com
+Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ntfs3/inode.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/fs/ntfs3/inode.c b/fs/ntfs3/inode.c
+index 20988ef3dc2ec..52b80fd159147 100644
+--- a/fs/ntfs3/inode.c
++++ b/fs/ntfs3/inode.c
+@@ -1703,7 +1703,10 @@ struct inode *ntfs_create_inode(struct mnt_idmap *idmap, struct inode *dir,
+       attr = ni_find_attr(ni, NULL, NULL, ATTR_EA, NULL, 0, NULL, NULL);
+       if (attr && attr->non_res) {
+               /* Delete ATTR_EA, if non-resident. */
+-              attr_set_size(ni, ATTR_EA, NULL, 0, NULL, 0, NULL, false, NULL);
++              struct runs_tree run;
++              run_init(&run);
++              attr_set_size(ni, ATTR_EA, NULL, 0, &run, 0, NULL, false, NULL);
++              run_close(&run);
+       }
+       if (rp_inserted)
+-- 
+2.43.0
+
diff --git a/queue-6.6/fs-ntfs3-fix-possible-deadlock-in-mi_read.patch b/queue-6.6/fs-ntfs3-fix-possible-deadlock-in-mi_read.patch
new file mode 100644 (file)
index 0000000..c2930f4
--- /dev/null
@@ -0,0 +1,34 @@
+From 847e9aaa96617c07c296d8f06db08df47cadcd2f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 28 Aug 2024 11:55:53 +0300
+Subject: fs/ntfs3: Fix possible deadlock in mi_read
+
+From: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
+
+[ Upstream commit 03b097099eef255fbf85ea6a786ae3c91b11f041 ]
+
+Mutex lock with another subclass used in ni_lock_dir().
+
+Reported-by: syzbot+bc7ca0ae4591cb2550f9@syzkaller.appspotmail.com
+Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ntfs3/namei.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/fs/ntfs3/namei.c b/fs/ntfs3/namei.c
+index bcdc1ec90a96a..61c4da8e6c3de 100644
+--- a/fs/ntfs3/namei.c
++++ b/fs/ntfs3/namei.c
+@@ -81,7 +81,7 @@ static struct dentry *ntfs_lookup(struct inode *dir, struct dentry *dentry,
+               if (err < 0)
+                       inode = ERR_PTR(err);
+               else {
+-                      ni_lock(ni);
++                      ni_lock_dir(ni);
+                       inode = dir_search_u(dir, uni, NULL);
+                       ni_unlock(ni);
+               }
+-- 
+2.43.0
+
diff --git a/queue-6.6/fs-ntfs3-fix-warning-possible-deadlock-in-ntfs_set_s.patch b/queue-6.6/fs-ntfs3-fix-warning-possible-deadlock-in-ntfs_set_s.patch
new file mode 100644 (file)
index 0000000..07e2351
--- /dev/null
@@ -0,0 +1,34 @@
+From 9b605e67b794a8033be5146520c2ba42660c21d0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 19 Aug 2024 16:26:22 +0300
+Subject: fs/ntfs3: Fix warning possible deadlock in ntfs_set_state
+
+From: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
+
+[ Upstream commit 5b2db723455a89dc96743d34d8bdaa23a402db2f ]
+
+Use non-zero subkey to skip analyzer warnings.
+
+Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
+Reported-by: syzbot+c2ada45c23d98d646118@syzkaller.appspotmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ntfs3/ntfs_fs.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/fs/ntfs3/ntfs_fs.h b/fs/ntfs3/ntfs_fs.h
+index 28788cf6ba407..cfe9d3bf07f91 100644
+--- a/fs/ntfs3/ntfs_fs.h
++++ b/fs/ntfs3/ntfs_fs.h
+@@ -334,7 +334,7 @@ struct mft_inode {
+ /* Nested class for ntfs_inode::ni_lock. */
+ enum ntfs_inode_mutex_lock_class {
+-      NTFS_INODE_MUTEX_DIRTY,
++      NTFS_INODE_MUTEX_DIRTY = 1,
+       NTFS_INODE_MUTEX_SECURITY,
+       NTFS_INODE_MUTEX_OBJID,
+       NTFS_INODE_MUTEX_REPARSE,
+-- 
+2.43.0
+
diff --git a/queue-6.6/fs-ntfs3-stale-inode-instead-of-bad.patch b/queue-6.6/fs-ntfs3-stale-inode-instead-of-bad.patch
new file mode 100644 (file)
index 0000000..26a065d
--- /dev/null
@@ -0,0 +1,43 @@
+From 6a21159ec01704c0df58adc7ff8459b85675b277 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 22 Aug 2024 14:43:32 +0300
+Subject: fs/ntfs3: Stale inode instead of bad
+
+From: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
+
+[ Upstream commit 1fd21919de6de245b63066b8ee3cfba92e36f0e9 ]
+
+Fixed the logic of processing inode with wrong sequence number.
+
+Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ntfs3/inode.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/fs/ntfs3/inode.c b/fs/ntfs3/inode.c
+index 1545262995da2..20988ef3dc2ec 100644
+--- a/fs/ntfs3/inode.c
++++ b/fs/ntfs3/inode.c
+@@ -532,11 +532,15 @@ struct inode *ntfs_iget5(struct super_block *sb, const struct MFT_REF *ref,
+       if (inode->i_state & I_NEW)
+               inode = ntfs_read_mft(inode, name, ref);
+       else if (ref->seq != ntfs_i(inode)->mi.mrec->seq) {
+-              /* Inode overlaps? */
+-              _ntfs_bad_inode(inode);
++              /*
++               * Sequence number is not expected.
++               * Looks like inode was reused but caller uses the old reference
++               */
++              iput(inode);
++              inode = ERR_PTR(-ESTALE);
+       }
+-      if (IS_ERR(inode) && name)
++      if (IS_ERR(inode))
+               ntfs_set_state(sb->s_fs_info, NTFS_DIRTY_ERROR);
+       return inode;
+-- 
+2.43.0
+
diff --git a/queue-6.6/misc-sgi-gru-don-t-disable-preemption-in-gru-driver.patch b/queue-6.6/misc-sgi-gru-don-t-disable-preemption-in-gru-driver.patch
new file mode 100644 (file)
index 0000000..25e41d1
--- /dev/null
@@ -0,0 +1,96 @@
+From 866bc6a60d05444977065d447ffc9cbd6f7a6976 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 19 Sep 2024 07:34:50 -0500
+Subject: misc: sgi-gru: Don't disable preemption in GRU driver
+
+From: Dimitri Sivanich <sivanich@hpe.com>
+
+[ Upstream commit b983b271662bd6104d429b0fd97af3333ba760bf ]
+
+Disabling preemption in the GRU driver is unnecessary, and clashes with
+sleeping locks in several code paths.  Remove preempt_disable and
+preempt_enable from the GRU driver.
+
+Signed-off-by: Dimitri Sivanich <sivanich@hpe.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/misc/sgi-gru/grukservices.c | 2 --
+ drivers/misc/sgi-gru/grumain.c      | 4 ----
+ drivers/misc/sgi-gru/grutlbpurge.c  | 2 --
+ 3 files changed, 8 deletions(-)
+
+diff --git a/drivers/misc/sgi-gru/grukservices.c b/drivers/misc/sgi-gru/grukservices.c
+index 37e804bbb1f28..205945ce9e86a 100644
+--- a/drivers/misc/sgi-gru/grukservices.c
++++ b/drivers/misc/sgi-gru/grukservices.c
+@@ -258,7 +258,6 @@ static int gru_get_cpu_resources(int dsr_bytes, void **cb, void **dsr)
+       int lcpu;
+       BUG_ON(dsr_bytes > GRU_NUM_KERNEL_DSR_BYTES);
+-      preempt_disable();
+       bs = gru_lock_kernel_context(-1);
+       lcpu = uv_blade_processor_id();
+       *cb = bs->kernel_cb + lcpu * GRU_HANDLE_STRIDE;
+@@ -272,7 +271,6 @@ static int gru_get_cpu_resources(int dsr_bytes, void **cb, void **dsr)
+ static void gru_free_cpu_resources(void *cb, void *dsr)
+ {
+       gru_unlock_kernel_context(uv_numa_blade_id());
+-      preempt_enable();
+ }
+ /*
+diff --git a/drivers/misc/sgi-gru/grumain.c b/drivers/misc/sgi-gru/grumain.c
+index 4eb4b94551390..d2b2e39783d06 100644
+--- a/drivers/misc/sgi-gru/grumain.c
++++ b/drivers/misc/sgi-gru/grumain.c
+@@ -941,10 +941,8 @@ vm_fault_t gru_fault(struct vm_fault *vmf)
+ again:
+       mutex_lock(&gts->ts_ctxlock);
+-      preempt_disable();
+       if (gru_check_context_placement(gts)) {
+-              preempt_enable();
+               mutex_unlock(&gts->ts_ctxlock);
+               gru_unload_context(gts, 1);
+               return VM_FAULT_NOPAGE;
+@@ -953,7 +951,6 @@ vm_fault_t gru_fault(struct vm_fault *vmf)
+       if (!gts->ts_gru) {
+               STAT(load_user_context);
+               if (!gru_assign_gru_context(gts)) {
+-                      preempt_enable();
+                       mutex_unlock(&gts->ts_ctxlock);
+                       set_current_state(TASK_INTERRUPTIBLE);
+                       schedule_timeout(GRU_ASSIGN_DELAY);  /* true hack ZZZ */
+@@ -969,7 +966,6 @@ vm_fault_t gru_fault(struct vm_fault *vmf)
+                               vma->vm_page_prot);
+       }
+-      preempt_enable();
+       mutex_unlock(&gts->ts_ctxlock);
+       return VM_FAULT_NOPAGE;
+diff --git a/drivers/misc/sgi-gru/grutlbpurge.c b/drivers/misc/sgi-gru/grutlbpurge.c
+index 10921cd2608df..1107dd3e2e9fa 100644
+--- a/drivers/misc/sgi-gru/grutlbpurge.c
++++ b/drivers/misc/sgi-gru/grutlbpurge.c
+@@ -65,7 +65,6 @@ static struct gru_tlb_global_handle *get_lock_tgh_handle(struct gru_state
+       struct gru_tlb_global_handle *tgh;
+       int n;
+-      preempt_disable();
+       if (uv_numa_blade_id() == gru->gs_blade_id)
+               n = get_on_blade_tgh(gru);
+       else
+@@ -79,7 +78,6 @@ static struct gru_tlb_global_handle *get_lock_tgh_handle(struct gru_state
+ static void get_unlock_tgh_handle(struct gru_tlb_global_handle *tgh)
+ {
+       unlock_tgh_handle(tgh);
+-      preempt_enable();
+ }
+ /*
+-- 
+2.43.0
+
diff --git a/queue-6.6/net-amd-mvme147-fix-probe-banner-message.patch b/queue-6.6/net-amd-mvme147-fix-probe-banner-message.patch
new file mode 100644 (file)
index 0000000..36fb1fb
--- /dev/null
@@ -0,0 +1,53 @@
+From 2d32a75dea103dd8374f795be9c8c14628327d73 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 7 Oct 2024 19:43:17 +0900
+Subject: net: amd: mvme147: Fix probe banner message
+
+From: Daniel Palmer <daniel@0x0f.com>
+
+[ Upstream commit 82c5b53140faf89c31ea2b3a0985a2f291694169 ]
+
+Currently this driver prints this line with what looks like
+a rogue format specifier when the device is probed:
+[    2.840000] eth%d: MVME147 at 0xfffe1800, irq 12, Hardware Address xx:xx:xx:xx:xx:xx
+
+Change the printk() for netdev_info() and move it after the
+registration has completed so it prints out the name of the
+interface properly.
+
+Signed-off-by: Daniel Palmer <daniel@0x0f.com>
+Reviewed-by: Simon Horman <horms@kernel.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/amd/mvme147.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/ethernet/amd/mvme147.c b/drivers/net/ethernet/amd/mvme147.c
+index 410c7b67eba4d..e6cc916d205f1 100644
+--- a/drivers/net/ethernet/amd/mvme147.c
++++ b/drivers/net/ethernet/amd/mvme147.c
+@@ -105,10 +105,6 @@ static struct net_device * __init mvme147lance_probe(void)
+       macaddr[3] = address&0xff;
+       eth_hw_addr_set(dev, macaddr);
+-      printk("%s: MVME147 at 0x%08lx, irq %d, Hardware Address %pM\n",
+-             dev->name, dev->base_addr, MVME147_LANCE_IRQ,
+-             dev->dev_addr);
+-
+       lp = netdev_priv(dev);
+       lp->ram = __get_dma_pages(GFP_ATOMIC, 3);       /* 32K */
+       if (!lp->ram) {
+@@ -138,6 +134,9 @@ static struct net_device * __init mvme147lance_probe(void)
+               return ERR_PTR(err);
+       }
++      netdev_info(dev, "MVME147 at 0x%08lx, irq %d, Hardware Address %pM\n",
++                  dev->base_addr, MVME147_LANCE_IRQ, dev->dev_addr);
++
+       return dev;
+ }
+-- 
+2.43.0
+
diff --git a/queue-6.6/nfs-remove-revoked-delegation-from-server-s-delegati.patch b/queue-6.6/nfs-remove-revoked-delegation-from-server-s-delegati.patch
new file mode 100644 (file)
index 0000000..4d0f461
--- /dev/null
@@ -0,0 +1,56 @@
+From 27dc4d2ac9cc92934f4b3a2cf15819afed9d1d1c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 8 Oct 2024 15:58:07 -0700
+Subject: NFS: remove revoked delegation from server's delegation list
+
+From: Dai Ngo <dai.ngo@oracle.com>
+
+[ Upstream commit 7ef60108069b7e3cc66432304e1dd197d5c0a9b5 ]
+
+After the delegation is returned to the NFS server remove it
+from the server's delegations list to reduce the time it takes
+to scan this list.
+
+Network trace captured while running the below script shows the
+time taken to service the CB_RECALL increases gradually due to
+the overhead of traversing the delegation list in
+nfs_delegation_find_inode_server.
+
+The NFS server in this test is a Solaris server which issues
+CB_RECALL when receiving the all-zero stateid in the SETATTR.
+
+mount=/mnt/data
+for i in $(seq 1 20)
+do
+   echo $i
+   mkdir $mount/testtarfile$i
+   time  tar -C $mount/testtarfile$i -xf 5000_files.tar
+done
+
+Signed-off-by: Dai Ngo <dai.ngo@oracle.com>
+Reviewed-by: Trond Myklebust <trond.myklebust@hammerspace.com>
+Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfs/delegation.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c
+index a2034511b6314..4bf2526a3a189 100644
+--- a/fs/nfs/delegation.c
++++ b/fs/nfs/delegation.c
+@@ -981,6 +981,11 @@ void nfs_delegation_mark_returned(struct inode *inode,
+       }
+       nfs_mark_delegation_revoked(delegation);
++      clear_bit(NFS_DELEGATION_RETURNING, &delegation->flags);
++      spin_unlock(&delegation->lock);
++      if (nfs_detach_delegation(NFS_I(inode), delegation, NFS_SERVER(inode)))
++              nfs_put_delegation(delegation);
++      goto out_rcu_unlock;
+ out_clear_returning:
+       clear_bit(NFS_DELEGATION_RETURNING, &delegation->flags);
+-- 
+2.43.0
+
diff --git a/queue-6.6/ntfs3-add-bounds-checking-to-mi_enum_attr.patch b/queue-6.6/ntfs3-add-bounds-checking-to-mi_enum_attr.patch
new file mode 100644 (file)
index 0000000..25636cf
--- /dev/null
@@ -0,0 +1,72 @@
+From 53d331df96c4e4d1c62607f9e4bc046861a1c5da Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 23 Aug 2024 21:39:44 +0800
+Subject: ntfs3: Add bounds checking to mi_enum_attr()
+
+From: lei lu <llfamsec@gmail.com>
+
+[ Upstream commit 556bdf27c2dd5c74a9caacbe524b943a6cd42d99 ]
+
+Added bounds checking to make sure that every attr don't stray beyond
+valid memory region.
+
+Signed-off-by: lei lu <llfamsec@gmail.com>
+Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ntfs3/record.c | 23 ++++++++++-------------
+ 1 file changed, 10 insertions(+), 13 deletions(-)
+
+diff --git a/fs/ntfs3/record.c b/fs/ntfs3/record.c
+index 6c76503edc200..2a375247b3c09 100644
+--- a/fs/ntfs3/record.c
++++ b/fs/ntfs3/record.c
+@@ -223,28 +223,19 @@ struct ATTRIB *mi_enum_attr(struct mft_inode *mi, struct ATTRIB *attr)
+               prev_type = 0;
+               attr = Add2Ptr(rec, off);
+       } else {
+-              /* Check if input attr inside record. */
++              /*
++               * We don't need to check previous attr here. There is
++               * a bounds checking in the previous round.
++               */
+               off = PtrOffset(rec, attr);
+-              if (off >= used)
+-                      return NULL;
+               asize = le32_to_cpu(attr->size);
+-              if (asize < SIZEOF_RESIDENT) {
+-                      /* Impossible 'cause we should not return such attribute. */
+-                      return NULL;
+-              }
+-
+-              /* Overflow check. */
+-              if (off + asize < off)
+-                      return NULL;
+               prev_type = le32_to_cpu(attr->type);
+               attr = Add2Ptr(attr, asize);
+               off += asize;
+       }
+-      asize = le32_to_cpu(attr->size);
+-
+       /* Can we use the first field (attr->type). */
+       if (off + 8 > used) {
+               static_assert(ALIGN(sizeof(enum ATTR_TYPE), 8) == 8);
+@@ -265,6 +256,12 @@ struct ATTRIB *mi_enum_attr(struct mft_inode *mi, struct ATTRIB *attr)
+       if (t32 < prev_type)
+               return NULL;
++      asize = le32_to_cpu(attr->size);
++      if (asize < SIZEOF_RESIDENT) {
++              /* Impossible 'cause we should not return such attribute. */
++              return NULL;
++      }
++
+       /* Check overflow and boundary. */
+       if (off + asize < off || off + asize > used)
+               return NULL;
+-- 
+2.43.0
+
diff --git a/queue-6.6/scsi-scsi_transport_fc-allow-setting-rport-state-to-.patch b/queue-6.6/scsi-scsi_transport_fc-allow-setting-rport-state-to-.patch
new file mode 100644 (file)
index 0000000..c8d4339
--- /dev/null
@@ -0,0 +1,48 @@
+From ec355a6f93f3998d468189ce03603d8b219579ab Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 17 Sep 2024 19:06:43 -0400
+Subject: scsi: scsi_transport_fc: Allow setting rport state to current state
+
+From: Benjamin Marzinski <bmarzins@redhat.com>
+
+[ Upstream commit d539a871ae47a1f27a609a62e06093fa69d7ce99 ]
+
+The only input fc_rport_set_marginal_state() currently accepts is
+"Marginal" when port_state is "Online", and "Online" when the port_state
+is "Marginal". It should also allow setting port_state to its current
+state, either "Marginal or "Online".
+
+Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+Link: https://lore.kernel.org/r/20240917230643.966768-1-bmarzins@redhat.com
+Reviewed-by: Ewan D. Milne <emilne@redhat.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/scsi_transport_fc.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c
+index b04075f19445d..96002966ca568 100644
+--- a/drivers/scsi/scsi_transport_fc.c
++++ b/drivers/scsi/scsi_transport_fc.c
+@@ -1255,7 +1255,7 @@ static ssize_t fc_rport_set_marginal_state(struct device *dev,
+                */
+               if (rport->port_state == FC_PORTSTATE_ONLINE)
+                       rport->port_state = port_state;
+-              else
++              else if (port_state != rport->port_state)
+                       return -EINVAL;
+       } else if (port_state == FC_PORTSTATE_ONLINE) {
+               /*
+@@ -1265,7 +1265,7 @@ static ssize_t fc_rport_set_marginal_state(struct device *dev,
+                */
+               if (rport->port_state == FC_PORTSTATE_MARGINAL)
+                       rport->port_state = port_state;
+-              else
++              else if (port_state != rport->port_state)
+                       return -EINVAL;
+       } else
+               return -EINVAL;
+-- 
+2.43.0
+
index b750547299d05e1f5f744ffe60c34c260332893b..2900e52493cdde2b41c2339da78c4e60d805b7d2 100644 (file)
@@ -60,3 +60,20 @@ acpi-cppc-make-rmw_lock-a-raw_spin_lock.patch
 smb-client-fix-parsing-of-device-numbers.patch
 smb-client-set-correct-device-number-on-nfs-reparse-.patch
 cxl-events-fix-trace-dram-event-record.patch
+ntfs3-add-bounds-checking-to-mi_enum_attr.patch
+fs-ntfs3-check-if-more-than-chunk-size-bytes-are-wri.patch
+fs-ntfs3-fix-warning-possible-deadlock-in-ntfs_set_s.patch
+fs-ntfs3-stale-inode-instead-of-bad.patch
+fs-ntfs3-add-rough-attr-alloc_size-check.patch
+fs-ntfs3-fix-possible-deadlock-in-mi_read.patch
+fs-ntfs3-additional-check-in-ni_clear.patch
+fs-ntfs3-fix-general-protection-fault-in-run_is_mapp.patch
+fs-ntfs3-additional-check-in-ntfs_file_release.patch
+scsi-scsi_transport_fc-allow-setting-rport-state-to-.patch
+cifs-improve-creating-native-symlinks-pointing-to-di.patch
+cifs-fix-creating-native-symlinks-pointing-to-curren.patch
+thermal-intel-int340x-processor-remove-mmio-rapl-cpu.patch
+thermal-intel-int340x-processor-add-mmio-rapl-pl4-su.patch
+net-amd-mvme147-fix-probe-banner-message.patch
+nfs-remove-revoked-delegation-from-server-s-delegati.patch
+misc-sgi-gru-don-t-disable-preemption-in-gru-driver.patch
diff --git a/queue-6.6/thermal-intel-int340x-processor-add-mmio-rapl-pl4-su.patch b/queue-6.6/thermal-intel-int340x-processor-add-mmio-rapl-pl4-su.patch
new file mode 100644 (file)
index 0000000..008bba6
--- /dev/null
@@ -0,0 +1,44 @@
+From fa719028ec84af14ba00709c1a53b02481b7cf09 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 30 Sep 2024 16:18:01 +0800
+Subject: thermal: intel: int340x: processor: Add MMIO RAPL PL4 support
+
+From: Zhang Rui <rui.zhang@intel.com>
+
+[ Upstream commit 3fb0eea8a1c4be5884e0731ea76cbd3ce126e1f3 ]
+
+Similar to the MSR RAPL interface, MMIO RAPL supports PL4 too, so add
+MMIO RAPL PL4d support to the processor_thermal driver.
+
+As a result, the powercap sysfs for MMIO RAPL will show a new "peak
+power" constraint.
+
+Signed-off-by: Zhang Rui <rui.zhang@intel.com>
+Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
+Link: https://patch.msgid.link/20240930081801.28502-7-rui.zhang@intel.com
+[ rjw: Subject and changelog edits ]
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../thermal/intel/int340x_thermal/processor_thermal_rapl.c    | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/thermal/intel/int340x_thermal/processor_thermal_rapl.c b/drivers/thermal/intel/int340x_thermal/processor_thermal_rapl.c
+index f7ab1f47ca7a6..f504781f4b7c5 100644
+--- a/drivers/thermal/intel/int340x_thermal/processor_thermal_rapl.c
++++ b/drivers/thermal/intel/int340x_thermal/processor_thermal_rapl.c
+@@ -13,9 +13,9 @@ static struct rapl_if_priv rapl_mmio_priv;
+ static const struct rapl_mmio_regs rapl_mmio_default = {
+       .reg_unit = 0x5938,
+-      .regs[RAPL_DOMAIN_PACKAGE] = { 0x59a0, 0x593c, 0x58f0, 0, 0x5930},
++      .regs[RAPL_DOMAIN_PACKAGE] = { 0x59a0, 0x593c, 0x58f0, 0, 0x5930, 0x59b0},
+       .regs[RAPL_DOMAIN_DRAM] = { 0x58e0, 0x58e8, 0x58ec, 0, 0},
+-      .limits[RAPL_DOMAIN_PACKAGE] = BIT(POWER_LIMIT2),
++      .limits[RAPL_DOMAIN_PACKAGE] = BIT(POWER_LIMIT2) | BIT(POWER_LIMIT4),
+       .limits[RAPL_DOMAIN_DRAM] = BIT(POWER_LIMIT2),
+ };
+-- 
+2.43.0
+
diff --git a/queue-6.6/thermal-intel-int340x-processor-remove-mmio-rapl-cpu.patch b/queue-6.6/thermal-intel-int340x-processor-remove-mmio-rapl-cpu.patch
new file mode 100644 (file)
index 0000000..265f7ca
--- /dev/null
@@ -0,0 +1,131 @@
+From d50409bdfe855bb59c21b5bfb1d91445dc8113f1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 30 Sep 2024 16:18:00 +0800
+Subject: thermal: intel: int340x: processor: Remove MMIO RAPL CPU hotplug
+ support
+
+From: Zhang Rui <rui.zhang@intel.com>
+
+[ Upstream commit bfc6819e4bf56a55df6178f93241b5845ad672eb ]
+
+CPU0/package0 is always online and the MMIO RAPL driver runs on single
+package systems only, so there is no need to handle CPU hotplug in it.
+
+Always register a RAPL package device for package 0 and remove the
+unnecessary CPU hotplug support.
+
+Signed-off-by: Zhang Rui <rui.zhang@intel.com>
+Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
+Link: https://patch.msgid.link/20240930081801.28502-6-rui.zhang@intel.com
+[ rjw: Subject edits ]
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../int340x_thermal/processor_thermal_rapl.c  | 66 +++++++------------
+ 1 file changed, 22 insertions(+), 44 deletions(-)
+
+diff --git a/drivers/thermal/intel/int340x_thermal/processor_thermal_rapl.c b/drivers/thermal/intel/int340x_thermal/processor_thermal_rapl.c
+index e964a9375722a..f7ab1f47ca7a6 100644
+--- a/drivers/thermal/intel/int340x_thermal/processor_thermal_rapl.c
++++ b/drivers/thermal/intel/int340x_thermal/processor_thermal_rapl.c
+@@ -19,42 +19,6 @@ static const struct rapl_mmio_regs rapl_mmio_default = {
+       .limits[RAPL_DOMAIN_DRAM] = BIT(POWER_LIMIT2),
+ };
+-static int rapl_mmio_cpu_online(unsigned int cpu)
+-{
+-      struct rapl_package *rp;
+-
+-      /* mmio rapl supports package 0 only for now */
+-      if (topology_physical_package_id(cpu))
+-              return 0;
+-
+-      rp = rapl_find_package_domain_cpuslocked(cpu, &rapl_mmio_priv, true);
+-      if (!rp) {
+-              rp = rapl_add_package_cpuslocked(cpu, &rapl_mmio_priv, true);
+-              if (IS_ERR(rp))
+-                      return PTR_ERR(rp);
+-      }
+-      cpumask_set_cpu(cpu, &rp->cpumask);
+-      return 0;
+-}
+-
+-static int rapl_mmio_cpu_down_prep(unsigned int cpu)
+-{
+-      struct rapl_package *rp;
+-      int lead_cpu;
+-
+-      rp = rapl_find_package_domain_cpuslocked(cpu, &rapl_mmio_priv, true);
+-      if (!rp)
+-              return 0;
+-
+-      cpumask_clear_cpu(cpu, &rp->cpumask);
+-      lead_cpu = cpumask_first(&rp->cpumask);
+-      if (lead_cpu >= nr_cpu_ids)
+-              rapl_remove_package_cpuslocked(rp);
+-      else if (rp->lead_cpu == cpu)
+-              rp->lead_cpu = lead_cpu;
+-      return 0;
+-}
+-
+ static int rapl_mmio_read_raw(int cpu, struct reg_action *ra)
+ {
+       if (!ra->reg.mmio)
+@@ -82,6 +46,7 @@ static int rapl_mmio_write_raw(int cpu, struct reg_action *ra)
+ int proc_thermal_rapl_add(struct pci_dev *pdev, struct proc_thermal_device *proc_priv)
+ {
+       const struct rapl_mmio_regs *rapl_regs = &rapl_mmio_default;
++      struct rapl_package *rp;
+       enum rapl_domain_reg_id reg;
+       enum rapl_domain_type domain;
+       int ret;
+@@ -109,25 +74,38 @@ int proc_thermal_rapl_add(struct pci_dev *pdev, struct proc_thermal_device *proc
+               return PTR_ERR(rapl_mmio_priv.control_type);
+       }
+-      ret = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "powercap/rapl:online",
+-                              rapl_mmio_cpu_online, rapl_mmio_cpu_down_prep);
+-      if (ret < 0) {
+-              powercap_unregister_control_type(rapl_mmio_priv.control_type);
+-              rapl_mmio_priv.control_type = NULL;
+-              return ret;
++      /* Register a RAPL package device for package 0 which is always online */
++      rp = rapl_find_package_domain(0, &rapl_mmio_priv, false);
++      if (rp) {
++              ret = -EEXIST;
++              goto err;
++      }
++
++      rp = rapl_add_package(0, &rapl_mmio_priv, false);
++      if (IS_ERR(rp)) {
++              ret = PTR_ERR(rp);
++              goto err;
+       }
+-      rapl_mmio_priv.pcap_rapl_online = ret;
+       return 0;
++
++err:
++      powercap_unregister_control_type(rapl_mmio_priv.control_type);
++      rapl_mmio_priv.control_type = NULL;
++      return ret;
+ }
+ EXPORT_SYMBOL_GPL(proc_thermal_rapl_add);
+ void proc_thermal_rapl_remove(void)
+ {
++      struct rapl_package *rp;
++
+       if (IS_ERR_OR_NULL(rapl_mmio_priv.control_type))
+               return;
+-      cpuhp_remove_state(rapl_mmio_priv.pcap_rapl_online);
++      rp = rapl_find_package_domain(0, &rapl_mmio_priv, false);
++      if (rp)
++              rapl_remove_package(rp);
+       powercap_unregister_control_type(rapl_mmio_priv.control_type);
+ }
+ EXPORT_SYMBOL_GPL(proc_thermal_rapl_remove);
+-- 
+2.43.0
+