]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.15
authorSasha Levin <sashal@kernel.org>
Mon, 9 Sep 2024 12:47:27 +0000 (08:47 -0400)
committerSasha Levin <sashal@kernel.org>
Mon, 9 Sep 2024 12:47:27 +0000 (08:47 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-5.15/ksmbd-unlock-on-in-ksmbd_tcp_set_interfaces.patch [new file with mode: 0644]
queue-5.15/ksmbd-unset-the-binding-mark-of-a-reused-connection.patch [new file with mode: 0644]
queue-5.15/nilfs2-protect-references-to-superblock-parameters-e.patch [new file with mode: 0644]
queue-5.15/nilfs2-replace-snprintf-in-show-functions-with-sysfs.patch [new file with mode: 0644]
queue-5.15/series

diff --git a/queue-5.15/ksmbd-unlock-on-in-ksmbd_tcp_set_interfaces.patch b/queue-5.15/ksmbd-unlock-on-in-ksmbd_tcp_set_interfaces.patch
new file mode 100644 (file)
index 0000000..c701f1f
--- /dev/null
@@ -0,0 +1,40 @@
+From 516affcbf9922dfa3baaadb17650cb102ac7795a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 29 Aug 2024 22:22:35 +0300
+Subject: ksmbd: Unlock on in ksmbd_tcp_set_interfaces()
+
+From: Dan Carpenter <dan.carpenter@linaro.org>
+
+[ Upstream commit 844436e045ac2ab7895d8b281cb784a24de1d14d ]
+
+Unlock before returning an error code if this allocation fails.
+
+Fixes: 0626e6641f6b ("cifsd: add server handler for central processing and tranport layers")
+Cc: stable@vger.kernel.org # v5.15+
+Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
+Acked-by: Namjae Jeon <linkinjeon@kernel.org>
+Signed-off-by: Steve French <stfrench@microsoft.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ksmbd/transport_tcp.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/fs/ksmbd/transport_tcp.c b/fs/ksmbd/transport_tcp.c
+index 9d4222154dcc..176295137045 100644
+--- a/fs/ksmbd/transport_tcp.c
++++ b/fs/ksmbd/transport_tcp.c
+@@ -618,8 +618,10 @@ int ksmbd_tcp_set_interfaces(char *ifc_list, int ifc_list_sz)
+               for_each_netdev(&init_net, netdev) {
+                       if (netif_is_bridge_port(netdev))
+                               continue;
+-                      if (!alloc_iface(kstrdup(netdev->name, GFP_KERNEL)))
++                      if (!alloc_iface(kstrdup(netdev->name, GFP_KERNEL))) {
++                              rtnl_unlock();
+                               return -ENOMEM;
++                      }
+               }
+               rtnl_unlock();
+               bind_additional_ifaces = 1;
+-- 
+2.43.0
+
diff --git a/queue-5.15/ksmbd-unset-the-binding-mark-of-a-reused-connection.patch b/queue-5.15/ksmbd-unset-the-binding-mark-of-a-reused-connection.patch
new file mode 100644 (file)
index 0000000..0ca18f0
--- /dev/null
@@ -0,0 +1,95 @@
+From 30666f6c113091b4b772711bface83495c6623c8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 27 Aug 2024 21:44:41 +0900
+Subject: ksmbd: unset the binding mark of a reused connection
+
+From: Namjae Jeon <linkinjeon@kernel.org>
+
+[ Upstream commit 78c5a6f1f630172b19af4912e755e1da93ef0ab5 ]
+
+Steve French reported null pointer dereference error from sha256 lib.
+cifs.ko can send session setup requests on reused connection.
+If reused connection is used for binding session, conn->binding can
+still remain true and generate_preauth_hash() will not set
+sess->Preauth_HashValue and it will be NULL.
+It is used as a material to create an encryption key in
+ksmbd_gen_smb311_encryptionkey. ->Preauth_HashValue cause null pointer
+dereference error from crypto_shash_update().
+
+BUG: kernel NULL pointer dereference, address: 0000000000000000
+#PF: supervisor read access in kernel mode
+#PF: error_code(0x0000) - not-present page
+PGD 0 P4D 0
+Oops: 0000 [#1] PREEMPT SMP PTI
+CPU: 8 PID: 429254 Comm: kworker/8:39
+Hardware name: LENOVO 20MAS08500/20MAS08500, BIOS N2CET69W (1.52 )
+Workqueue: ksmbd-io handle_ksmbd_work [ksmbd]
+RIP: 0010:lib_sha256_base_do_update.isra.0+0x11e/0x1d0 [sha256_ssse3]
+<TASK>
+? show_regs+0x6d/0x80
+? __die+0x24/0x80
+? page_fault_oops+0x99/0x1b0
+? do_user_addr_fault+0x2ee/0x6b0
+? exc_page_fault+0x83/0x1b0
+? asm_exc_page_fault+0x27/0x30
+? __pfx_sha256_transform_rorx+0x10/0x10 [sha256_ssse3]
+? lib_sha256_base_do_update.isra.0+0x11e/0x1d0 [sha256_ssse3]
+? __pfx_sha256_transform_rorx+0x10/0x10 [sha256_ssse3]
+? __pfx_sha256_transform_rorx+0x10/0x10 [sha256_ssse3]
+_sha256_update+0x77/0xa0 [sha256_ssse3]
+sha256_avx2_update+0x15/0x30 [sha256_ssse3]
+crypto_shash_update+0x1e/0x40
+hmac_update+0x12/0x20
+crypto_shash_update+0x1e/0x40
+generate_key+0x234/0x380 [ksmbd]
+generate_smb3encryptionkey+0x40/0x1c0 [ksmbd]
+ksmbd_gen_smb311_encryptionkey+0x72/0xa0 [ksmbd]
+ntlm_authenticate.isra.0+0x423/0x5d0 [ksmbd]
+smb2_sess_setup+0x952/0xaa0 [ksmbd]
+__process_request+0xa3/0x1d0 [ksmbd]
+__handle_ksmbd_work+0x1c4/0x2f0 [ksmbd]
+handle_ksmbd_work+0x2d/0xa0 [ksmbd]
+process_one_work+0x16c/0x350
+worker_thread+0x306/0x440
+? __pfx_worker_thread+0x10/0x10
+kthread+0xef/0x120
+? __pfx_kthread+0x10/0x10
+ret_from_fork+0x44/0x70
+? __pfx_kthread+0x10/0x10
+ret_from_fork_asm+0x1b/0x30
+</TASK>
+
+Fixes: f5a544e3bab7 ("ksmbd: add support for SMB3 multichannel")
+Cc: stable@vger.kernel.org # v5.15+
+Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
+Signed-off-by: Steve French <stfrench@microsoft.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ksmbd/smb2pdu.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
+index 57f59172d821..089dc2f51229 100644
+--- a/fs/ksmbd/smb2pdu.c
++++ b/fs/ksmbd/smb2pdu.c
+@@ -1705,6 +1705,8 @@ int smb2_sess_setup(struct ksmbd_work *work)
+               rc = ksmbd_session_register(conn, sess);
+               if (rc)
+                       goto out_err;
++
++              conn->binding = false;
+       } else if (conn->dialect >= SMB30_PROT_ID &&
+                  (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB3_MULTICHANNEL) &&
+                  req->Flags & SMB2_SESSION_REQ_FLAG_BINDING) {
+@@ -1783,6 +1785,8 @@ int smb2_sess_setup(struct ksmbd_work *work)
+                       sess = NULL;
+                       goto out_err;
+               }
++
++              conn->binding = false;
+       }
+       work->sess = sess;
+-- 
+2.43.0
+
diff --git a/queue-5.15/nilfs2-protect-references-to-superblock-parameters-e.patch b/queue-5.15/nilfs2-protect-references-to-superblock-parameters-e.patch
new file mode 100644 (file)
index 0000000..4c3c883
--- /dev/null
@@ -0,0 +1,109 @@
+From 4f880c3252e13c3bd12a331c040d0810a229593b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 11 Aug 2024 19:03:20 +0900
+Subject: nilfs2: protect references to superblock parameters exposed in sysfs
+
+From: Ryusuke Konishi <konishi.ryusuke@gmail.com>
+
+[ Upstream commit 683408258917541bdb294cd717c210a04381931e ]
+
+The superblock buffers of nilfs2 can not only be overwritten at runtime
+for modifications/repairs, but they are also regularly swapped, replaced
+during resizing, and even abandoned when degrading to one side due to
+backing device issues.  So, accessing them requires mutual exclusion using
+the reader/writer semaphore "nilfs->ns_sem".
+
+Some sysfs attribute show methods read this superblock buffer without the
+necessary mutual exclusion, which can cause problems with pointer
+dereferencing and memory access, so fix it.
+
+Link: https://lkml.kernel.org/r/20240811100320.9913-1-konishi.ryusuke@gmail.com
+Fixes: da7141fb78db ("nilfs2: add /sys/fs/nilfs2/<device> group")
+Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nilfs2/sysfs.c | 43 +++++++++++++++++++++++++++++++++----------
+ 1 file changed, 33 insertions(+), 10 deletions(-)
+
+diff --git a/fs/nilfs2/sysfs.c b/fs/nilfs2/sysfs.c
+index be407072def7..453b8efe01b6 100644
+--- a/fs/nilfs2/sysfs.c
++++ b/fs/nilfs2/sysfs.c
+@@ -830,9 +830,15 @@ ssize_t nilfs_dev_revision_show(struct nilfs_dev_attr *attr,
+                               struct the_nilfs *nilfs,
+                               char *buf)
+ {
+-      struct nilfs_super_block **sbp = nilfs->ns_sbp;
+-      u32 major = le32_to_cpu(sbp[0]->s_rev_level);
+-      u16 minor = le16_to_cpu(sbp[0]->s_minor_rev_level);
++      struct nilfs_super_block *raw_sb;
++      u32 major;
++      u16 minor;
++
++      down_read(&nilfs->ns_sem);
++      raw_sb = nilfs->ns_sbp[0];
++      major = le32_to_cpu(raw_sb->s_rev_level);
++      minor = le16_to_cpu(raw_sb->s_minor_rev_level);
++      up_read(&nilfs->ns_sem);
+       return sysfs_emit(buf, "%d.%d\n", major, minor);
+ }
+@@ -850,8 +856,13 @@ ssize_t nilfs_dev_device_size_show(struct nilfs_dev_attr *attr,
+                                   struct the_nilfs *nilfs,
+                                   char *buf)
+ {
+-      struct nilfs_super_block **sbp = nilfs->ns_sbp;
+-      u64 dev_size = le64_to_cpu(sbp[0]->s_dev_size);
++      struct nilfs_super_block *raw_sb;
++      u64 dev_size;
++
++      down_read(&nilfs->ns_sem);
++      raw_sb = nilfs->ns_sbp[0];
++      dev_size = le64_to_cpu(raw_sb->s_dev_size);
++      up_read(&nilfs->ns_sem);
+       return sysfs_emit(buf, "%llu\n", dev_size);
+ }
+@@ -873,9 +884,15 @@ ssize_t nilfs_dev_uuid_show(struct nilfs_dev_attr *attr,
+                           struct the_nilfs *nilfs,
+                           char *buf)
+ {
+-      struct nilfs_super_block **sbp = nilfs->ns_sbp;
++      struct nilfs_super_block *raw_sb;
++      ssize_t len;
+-      return sysfs_emit(buf, "%pUb\n", sbp[0]->s_uuid);
++      down_read(&nilfs->ns_sem);
++      raw_sb = nilfs->ns_sbp[0];
++      len = sysfs_emit(buf, "%pUb\n", raw_sb->s_uuid);
++      up_read(&nilfs->ns_sem);
++
++      return len;
+ }
+ static
+@@ -883,10 +900,16 @@ ssize_t nilfs_dev_volume_name_show(struct nilfs_dev_attr *attr,
+                                   struct the_nilfs *nilfs,
+                                   char *buf)
+ {
+-      struct nilfs_super_block **sbp = nilfs->ns_sbp;
++      struct nilfs_super_block *raw_sb;
++      ssize_t len;
++
++      down_read(&nilfs->ns_sem);
++      raw_sb = nilfs->ns_sbp[0];
++      len = scnprintf(buf, sizeof(raw_sb->s_volume_name), "%s\n",
++                      raw_sb->s_volume_name);
++      up_read(&nilfs->ns_sem);
+-      return scnprintf(buf, sizeof(sbp[0]->s_volume_name), "%s\n",
+-                       sbp[0]->s_volume_name);
++      return len;
+ }
+ static const char dev_readme_str[] =
+-- 
+2.43.0
+
diff --git a/queue-5.15/nilfs2-replace-snprintf-in-show-functions-with-sysfs.patch b/queue-5.15/nilfs2-replace-snprintf-in-show-functions-with-sysfs.patch
new file mode 100644 (file)
index 0000000..1f82e73
--- /dev/null
@@ -0,0 +1,383 @@
+From 3acaa8dc53ae267601ba1268e74f5178022da3a4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 8 Nov 2021 18:34:58 -0800
+Subject: nilfs2: replace snprintf in show functions with sysfs_emit
+
+From: Qing Wang <wangqing@vivo.com>
+
+[ Upstream commit 3bcd6c5bd483287f4a09d3d59a012d47677b6edc ]
+
+Patch series "nilfs2 updates".
+
+This patch (of 2):
+
+coccicheck complains about the use of snprintf() in sysfs show functions.
+
+Fix the coccicheck warning:
+
+  WARNING: use scnprintf or sprintf.
+
+Use sysfs_emit instead of scnprintf or sprintf makes more sense.
+
+Link: https://lkml.kernel.org/r/1635151862-11547-1-git-send-email-konishi.ryusuke@gmail.com
+Link: https://lkml.kernel.org/r/1634095759-4625-1-git-send-email-wangqing@vivo.com
+Link: https://lkml.kernel.org/r/1635151862-11547-2-git-send-email-konishi.ryusuke@gmail.com
+Signed-off-by: Qing Wang <wangqing@vivo.com>
+Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Stable-dep-of: 683408258917 ("nilfs2: protect references to superblock parameters exposed in sysfs")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nilfs2/sysfs.c | 76 +++++++++++++++++++++++------------------------
+ 1 file changed, 38 insertions(+), 38 deletions(-)
+
+diff --git a/fs/nilfs2/sysfs.c b/fs/nilfs2/sysfs.c
+index 62f8a7ac19c8..be407072def7 100644
+--- a/fs/nilfs2/sysfs.c
++++ b/fs/nilfs2/sysfs.c
+@@ -95,7 +95,7 @@ static ssize_t
+ nilfs_snapshot_inodes_count_show(struct nilfs_snapshot_attr *attr,
+                                struct nilfs_root *root, char *buf)
+ {
+-      return snprintf(buf, PAGE_SIZE, "%llu\n",
++      return sysfs_emit(buf, "%llu\n",
+                       (unsigned long long)atomic64_read(&root->inodes_count));
+ }
+@@ -103,7 +103,7 @@ static ssize_t
+ nilfs_snapshot_blocks_count_show(struct nilfs_snapshot_attr *attr,
+                                struct nilfs_root *root, char *buf)
+ {
+-      return snprintf(buf, PAGE_SIZE, "%llu\n",
++      return sysfs_emit(buf, "%llu\n",
+                       (unsigned long long)atomic64_read(&root->blocks_count));
+ }
+@@ -116,7 +116,7 @@ static ssize_t
+ nilfs_snapshot_README_show(struct nilfs_snapshot_attr *attr,
+                           struct nilfs_root *root, char *buf)
+ {
+-      return snprintf(buf, PAGE_SIZE, snapshot_readme_str);
++      return sysfs_emit(buf, snapshot_readme_str);
+ }
+ NILFS_SNAPSHOT_RO_ATTR(inodes_count);
+@@ -217,7 +217,7 @@ static ssize_t
+ nilfs_mounted_snapshots_README_show(struct nilfs_mounted_snapshots_attr *attr,
+                                   struct the_nilfs *nilfs, char *buf)
+ {
+-      return snprintf(buf, PAGE_SIZE, mounted_snapshots_readme_str);
++      return sysfs_emit(buf, mounted_snapshots_readme_str);
+ }
+ NILFS_MOUNTED_SNAPSHOTS_RO_ATTR(README);
+@@ -255,7 +255,7 @@ nilfs_checkpoints_checkpoints_number_show(struct nilfs_checkpoints_attr *attr,
+       ncheckpoints = cpstat.cs_ncps;
+-      return snprintf(buf, PAGE_SIZE, "%llu\n", ncheckpoints);
++      return sysfs_emit(buf, "%llu\n", ncheckpoints);
+ }
+ static ssize_t
+@@ -278,7 +278,7 @@ nilfs_checkpoints_snapshots_number_show(struct nilfs_checkpoints_attr *attr,
+       nsnapshots = cpstat.cs_nsss;
+-      return snprintf(buf, PAGE_SIZE, "%llu\n", nsnapshots);
++      return sysfs_emit(buf, "%llu\n", nsnapshots);
+ }
+ static ssize_t
+@@ -292,7 +292,7 @@ nilfs_checkpoints_last_seg_checkpoint_show(struct nilfs_checkpoints_attr *attr,
+       last_cno = nilfs->ns_last_cno;
+       spin_unlock(&nilfs->ns_last_segment_lock);
+-      return snprintf(buf, PAGE_SIZE, "%llu\n", last_cno);
++      return sysfs_emit(buf, "%llu\n", last_cno);
+ }
+ static ssize_t
+@@ -306,7 +306,7 @@ nilfs_checkpoints_next_checkpoint_show(struct nilfs_checkpoints_attr *attr,
+       cno = nilfs->ns_cno;
+       up_read(&nilfs->ns_segctor_sem);
+-      return snprintf(buf, PAGE_SIZE, "%llu\n", cno);
++      return sysfs_emit(buf, "%llu\n", cno);
+ }
+ static const char checkpoints_readme_str[] =
+@@ -322,7 +322,7 @@ static ssize_t
+ nilfs_checkpoints_README_show(struct nilfs_checkpoints_attr *attr,
+                               struct the_nilfs *nilfs, char *buf)
+ {
+-      return snprintf(buf, PAGE_SIZE, checkpoints_readme_str);
++      return sysfs_emit(buf, checkpoints_readme_str);
+ }
+ NILFS_CHECKPOINTS_RO_ATTR(checkpoints_number);
+@@ -353,7 +353,7 @@ nilfs_segments_segments_number_show(struct nilfs_segments_attr *attr,
+                                    struct the_nilfs *nilfs,
+                                    char *buf)
+ {
+-      return snprintf(buf, PAGE_SIZE, "%lu\n", nilfs->ns_nsegments);
++      return sysfs_emit(buf, "%lu\n", nilfs->ns_nsegments);
+ }
+ static ssize_t
+@@ -361,7 +361,7 @@ nilfs_segments_blocks_per_segment_show(struct nilfs_segments_attr *attr,
+                                       struct the_nilfs *nilfs,
+                                       char *buf)
+ {
+-      return snprintf(buf, PAGE_SIZE, "%lu\n", nilfs->ns_blocks_per_segment);
++      return sysfs_emit(buf, "%lu\n", nilfs->ns_blocks_per_segment);
+ }
+ static ssize_t
+@@ -375,7 +375,7 @@ nilfs_segments_clean_segments_show(struct nilfs_segments_attr *attr,
+       ncleansegs = nilfs_sufile_get_ncleansegs(nilfs->ns_sufile);
+       up_read(&NILFS_MDT(nilfs->ns_dat)->mi_sem);
+-      return snprintf(buf, PAGE_SIZE, "%lu\n", ncleansegs);
++      return sysfs_emit(buf, "%lu\n", ncleansegs);
+ }
+ static ssize_t
+@@ -395,7 +395,7 @@ nilfs_segments_dirty_segments_show(struct nilfs_segments_attr *attr,
+               return err;
+       }
+-      return snprintf(buf, PAGE_SIZE, "%llu\n", sustat.ss_ndirtysegs);
++      return sysfs_emit(buf, "%llu\n", sustat.ss_ndirtysegs);
+ }
+ static const char segments_readme_str[] =
+@@ -411,7 +411,7 @@ nilfs_segments_README_show(struct nilfs_segments_attr *attr,
+                           struct the_nilfs *nilfs,
+                           char *buf)
+ {
+-      return snprintf(buf, PAGE_SIZE, segments_readme_str);
++      return sysfs_emit(buf, segments_readme_str);
+ }
+ NILFS_SEGMENTS_RO_ATTR(segments_number);
+@@ -448,7 +448,7 @@ nilfs_segctor_last_pseg_block_show(struct nilfs_segctor_attr *attr,
+       last_pseg = nilfs->ns_last_pseg;
+       spin_unlock(&nilfs->ns_last_segment_lock);
+-      return snprintf(buf, PAGE_SIZE, "%llu\n",
++      return sysfs_emit(buf, "%llu\n",
+                       (unsigned long long)last_pseg);
+ }
+@@ -463,7 +463,7 @@ nilfs_segctor_last_seg_sequence_show(struct nilfs_segctor_attr *attr,
+       last_seq = nilfs->ns_last_seq;
+       spin_unlock(&nilfs->ns_last_segment_lock);
+-      return snprintf(buf, PAGE_SIZE, "%llu\n", last_seq);
++      return sysfs_emit(buf, "%llu\n", last_seq);
+ }
+ static ssize_t
+@@ -477,7 +477,7 @@ nilfs_segctor_last_seg_checkpoint_show(struct nilfs_segctor_attr *attr,
+       last_cno = nilfs->ns_last_cno;
+       spin_unlock(&nilfs->ns_last_segment_lock);
+-      return snprintf(buf, PAGE_SIZE, "%llu\n", last_cno);
++      return sysfs_emit(buf, "%llu\n", last_cno);
+ }
+ static ssize_t
+@@ -491,7 +491,7 @@ nilfs_segctor_current_seg_sequence_show(struct nilfs_segctor_attr *attr,
+       seg_seq = nilfs->ns_seg_seq;
+       up_read(&nilfs->ns_segctor_sem);
+-      return snprintf(buf, PAGE_SIZE, "%llu\n", seg_seq);
++      return sysfs_emit(buf, "%llu\n", seg_seq);
+ }
+ static ssize_t
+@@ -505,7 +505,7 @@ nilfs_segctor_current_last_full_seg_show(struct nilfs_segctor_attr *attr,
+       segnum = nilfs->ns_segnum;
+       up_read(&nilfs->ns_segctor_sem);
+-      return snprintf(buf, PAGE_SIZE, "%llu\n", segnum);
++      return sysfs_emit(buf, "%llu\n", segnum);
+ }
+ static ssize_t
+@@ -519,7 +519,7 @@ nilfs_segctor_next_full_seg_show(struct nilfs_segctor_attr *attr,
+       nextnum = nilfs->ns_nextnum;
+       up_read(&nilfs->ns_segctor_sem);
+-      return snprintf(buf, PAGE_SIZE, "%llu\n", nextnum);
++      return sysfs_emit(buf, "%llu\n", nextnum);
+ }
+ static ssize_t
+@@ -533,7 +533,7 @@ nilfs_segctor_next_pseg_offset_show(struct nilfs_segctor_attr *attr,
+       pseg_offset = nilfs->ns_pseg_offset;
+       up_read(&nilfs->ns_segctor_sem);
+-      return snprintf(buf, PAGE_SIZE, "%lu\n", pseg_offset);
++      return sysfs_emit(buf, "%lu\n", pseg_offset);
+ }
+ static ssize_t
+@@ -547,7 +547,7 @@ nilfs_segctor_next_checkpoint_show(struct nilfs_segctor_attr *attr,
+       cno = nilfs->ns_cno;
+       up_read(&nilfs->ns_segctor_sem);
+-      return snprintf(buf, PAGE_SIZE, "%llu\n", cno);
++      return sysfs_emit(buf, "%llu\n", cno);
+ }
+ static ssize_t
+@@ -575,7 +575,7 @@ nilfs_segctor_last_seg_write_time_secs_show(struct nilfs_segctor_attr *attr,
+       ctime = nilfs->ns_ctime;
+       up_read(&nilfs->ns_segctor_sem);
+-      return snprintf(buf, PAGE_SIZE, "%llu\n", ctime);
++      return sysfs_emit(buf, "%llu\n", ctime);
+ }
+ static ssize_t
+@@ -603,7 +603,7 @@ nilfs_segctor_last_nongc_write_time_secs_show(struct nilfs_segctor_attr *attr,
+       nongc_ctime = nilfs->ns_nongc_ctime;
+       up_read(&nilfs->ns_segctor_sem);
+-      return snprintf(buf, PAGE_SIZE, "%llu\n", nongc_ctime);
++      return sysfs_emit(buf, "%llu\n", nongc_ctime);
+ }
+ static ssize_t
+@@ -617,7 +617,7 @@ nilfs_segctor_dirty_data_blocks_count_show(struct nilfs_segctor_attr *attr,
+       ndirtyblks = atomic_read(&nilfs->ns_ndirtyblks);
+       up_read(&nilfs->ns_segctor_sem);
+-      return snprintf(buf, PAGE_SIZE, "%u\n", ndirtyblks);
++      return sysfs_emit(buf, "%u\n", ndirtyblks);
+ }
+ static const char segctor_readme_str[] =
+@@ -654,7 +654,7 @@ static ssize_t
+ nilfs_segctor_README_show(struct nilfs_segctor_attr *attr,
+                         struct the_nilfs *nilfs, char *buf)
+ {
+-      return snprintf(buf, PAGE_SIZE, segctor_readme_str);
++      return sysfs_emit(buf, segctor_readme_str);
+ }
+ NILFS_SEGCTOR_RO_ATTR(last_pseg_block);
+@@ -723,7 +723,7 @@ nilfs_superblock_sb_write_time_secs_show(struct nilfs_superblock_attr *attr,
+       sbwtime = nilfs->ns_sbwtime;
+       up_read(&nilfs->ns_sem);
+-      return snprintf(buf, PAGE_SIZE, "%llu\n", sbwtime);
++      return sysfs_emit(buf, "%llu\n", sbwtime);
+ }
+ static ssize_t
+@@ -737,7 +737,7 @@ nilfs_superblock_sb_write_count_show(struct nilfs_superblock_attr *attr,
+       sbwcount = nilfs->ns_sbwcount;
+       up_read(&nilfs->ns_sem);
+-      return snprintf(buf, PAGE_SIZE, "%u\n", sbwcount);
++      return sysfs_emit(buf, "%u\n", sbwcount);
+ }
+ static ssize_t
+@@ -751,7 +751,7 @@ nilfs_superblock_sb_update_frequency_show(struct nilfs_superblock_attr *attr,
+       sb_update_freq = nilfs->ns_sb_update_freq;
+       up_read(&nilfs->ns_sem);
+-      return snprintf(buf, PAGE_SIZE, "%u\n", sb_update_freq);
++      return sysfs_emit(buf, "%u\n", sb_update_freq);
+ }
+ static ssize_t
+@@ -799,7 +799,7 @@ static ssize_t
+ nilfs_superblock_README_show(struct nilfs_superblock_attr *attr,
+                               struct the_nilfs *nilfs, char *buf)
+ {
+-      return snprintf(buf, PAGE_SIZE, sb_readme_str);
++      return sysfs_emit(buf, sb_readme_str);
+ }
+ NILFS_SUPERBLOCK_RO_ATTR(sb_write_time);
+@@ -834,7 +834,7 @@ ssize_t nilfs_dev_revision_show(struct nilfs_dev_attr *attr,
+       u32 major = le32_to_cpu(sbp[0]->s_rev_level);
+       u16 minor = le16_to_cpu(sbp[0]->s_minor_rev_level);
+-      return snprintf(buf, PAGE_SIZE, "%d.%d\n", major, minor);
++      return sysfs_emit(buf, "%d.%d\n", major, minor);
+ }
+ static
+@@ -842,7 +842,7 @@ ssize_t nilfs_dev_blocksize_show(struct nilfs_dev_attr *attr,
+                                struct the_nilfs *nilfs,
+                                char *buf)
+ {
+-      return snprintf(buf, PAGE_SIZE, "%u\n", nilfs->ns_blocksize);
++      return sysfs_emit(buf, "%u\n", nilfs->ns_blocksize);
+ }
+ static
+@@ -853,7 +853,7 @@ ssize_t nilfs_dev_device_size_show(struct nilfs_dev_attr *attr,
+       struct nilfs_super_block **sbp = nilfs->ns_sbp;
+       u64 dev_size = le64_to_cpu(sbp[0]->s_dev_size);
+-      return snprintf(buf, PAGE_SIZE, "%llu\n", dev_size);
++      return sysfs_emit(buf, "%llu\n", dev_size);
+ }
+ static
+@@ -864,7 +864,7 @@ ssize_t nilfs_dev_free_blocks_show(struct nilfs_dev_attr *attr,
+       sector_t free_blocks = 0;
+       nilfs_count_free_blocks(nilfs, &free_blocks);
+-      return snprintf(buf, PAGE_SIZE, "%llu\n",
++      return sysfs_emit(buf, "%llu\n",
+                       (unsigned long long)free_blocks);
+ }
+@@ -875,7 +875,7 @@ ssize_t nilfs_dev_uuid_show(struct nilfs_dev_attr *attr,
+ {
+       struct nilfs_super_block **sbp = nilfs->ns_sbp;
+-      return snprintf(buf, PAGE_SIZE, "%pUb\n", sbp[0]->s_uuid);
++      return sysfs_emit(buf, "%pUb\n", sbp[0]->s_uuid);
+ }
+ static
+@@ -903,7 +903,7 @@ static ssize_t nilfs_dev_README_show(struct nilfs_dev_attr *attr,
+                                    struct the_nilfs *nilfs,
+                                    char *buf)
+ {
+-      return snprintf(buf, PAGE_SIZE, dev_readme_str);
++      return sysfs_emit(buf, dev_readme_str);
+ }
+ NILFS_DEV_RO_ATTR(revision);
+@@ -1047,7 +1047,7 @@ void nilfs_sysfs_delete_device_group(struct the_nilfs *nilfs)
+ static ssize_t nilfs_feature_revision_show(struct kobject *kobj,
+                                           struct attribute *attr, char *buf)
+ {
+-      return snprintf(buf, PAGE_SIZE, "%d.%d\n",
++      return sysfs_emit(buf, "%d.%d\n",
+                       NILFS_CURRENT_REV, NILFS_MINOR_REV);
+ }
+@@ -1060,7 +1060,7 @@ static ssize_t nilfs_feature_README_show(struct kobject *kobj,
+                                        struct attribute *attr,
+                                        char *buf)
+ {
+-      return snprintf(buf, PAGE_SIZE, features_readme_str);
++      return sysfs_emit(buf, features_readme_str);
+ }
+ NILFS_FEATURE_RO_ATTR(revision);
+-- 
+2.43.0
+
index 286c3936b03041e204720e3278abcd9e6baf2065..3130695a2fce3ca9f64e2b2b3b78c4a4845084a0 100644 (file)
@@ -172,3 +172,7 @@ mips-cevt-r4k-don-t-call-get_c0_compare_int-if-timer.patch
 ata-pata_macio-use-warn-instead-of-bug.patch
 nfsv4-add-missing-rescheduling-points-in-nfs_client_.patch
 cifs-check-the-lease-context-if-we-actually-got-a-lease.patch
+ksmbd-unset-the-binding-mark-of-a-reused-connection.patch
+ksmbd-unlock-on-in-ksmbd_tcp_set_interfaces.patch
+nilfs2-replace-snprintf-in-show-functions-with-sysfs.patch
+nilfs2-protect-references-to-superblock-parameters-e.patch