release 6.15.5
This commit is contained in:
77
debian/patches/patchset-pf/smb/0001-cifs-all-initializations-for-tcon-should-happen-in-t.patch
vendored
Normal file
77
debian/patches/patchset-pf/smb/0001-cifs-all-initializations-for-tcon-should-happen-in-t.patch
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
From 57fd039971b09ce2e6a442f822146099f72888c3 Mon Sep 17 00:00:00 2001
|
||||
From: Shyam Prasad N <sprasad@microsoft.com>
|
||||
Date: Mon, 30 Jun 2025 23:09:34 +0530
|
||||
Subject: cifs: all initializations for tcon should happen in tcon_info_alloc
|
||||
|
||||
Today, a few work structs inside tcon are initialized inside
|
||||
cifs_get_tcon and not in tcon_info_alloc. As a result, if a tcon
|
||||
is obtained from tcon_info_alloc, but not called as a part of
|
||||
cifs_get_tcon, we may trip over.
|
||||
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
|
||||
Reviewed-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
|
||||
Signed-off-by: Steve French <stfrench@microsoft.com>
|
||||
---
|
||||
fs/smb/client/cifsproto.h | 1 +
|
||||
fs/smb/client/connect.c | 8 +-------
|
||||
fs/smb/client/misc.c | 6 ++++++
|
||||
3 files changed, 8 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/fs/smb/client/cifsproto.h
|
||||
+++ b/fs/smb/client/cifsproto.h
|
||||
@@ -136,6 +136,7 @@ extern int SendReceiveBlockingLock(const
|
||||
struct smb_hdr *out_buf,
|
||||
int *bytes_returned);
|
||||
|
||||
+void smb2_query_server_interfaces(struct work_struct *work);
|
||||
void
|
||||
cifs_signal_cifsd_for_reconnect(struct TCP_Server_Info *server,
|
||||
bool all_channels);
|
||||
--- a/fs/smb/client/connect.c
|
||||
+++ b/fs/smb/client/connect.c
|
||||
@@ -97,7 +97,7 @@ static int reconn_set_ipaddr_from_hostna
|
||||
return rc;
|
||||
}
|
||||
|
||||
-static void smb2_query_server_interfaces(struct work_struct *work)
|
||||
+void smb2_query_server_interfaces(struct work_struct *work)
|
||||
{
|
||||
int rc;
|
||||
int xid;
|
||||
@@ -2880,20 +2880,14 @@ cifs_get_tcon(struct cifs_ses *ses, stru
|
||||
tcon->max_cached_dirs = ctx->max_cached_dirs;
|
||||
tcon->nodelete = ctx->nodelete;
|
||||
tcon->local_lease = ctx->local_lease;
|
||||
- INIT_LIST_HEAD(&tcon->pending_opens);
|
||||
tcon->status = TID_GOOD;
|
||||
|
||||
- INIT_DELAYED_WORK(&tcon->query_interfaces,
|
||||
- smb2_query_server_interfaces);
|
||||
if (ses->server->dialect >= SMB30_PROT_ID &&
|
||||
(ses->server->capabilities & SMB2_GLOBAL_CAP_MULTI_CHANNEL)) {
|
||||
/* schedule query interfaces poll */
|
||||
queue_delayed_work(cifsiod_wq, &tcon->query_interfaces,
|
||||
(SMB_INTERFACE_POLL_INTERVAL * HZ));
|
||||
}
|
||||
-#ifdef CONFIG_CIFS_DFS_UPCALL
|
||||
- INIT_DELAYED_WORK(&tcon->dfs_cache_work, dfs_cache_refresh);
|
||||
-#endif
|
||||
spin_lock(&cifs_tcp_ses_lock);
|
||||
list_add(&tcon->tcon_list, &ses->tcon_list);
|
||||
spin_unlock(&cifs_tcp_ses_lock);
|
||||
--- a/fs/smb/client/misc.c
|
||||
+++ b/fs/smb/client/misc.c
|
||||
@@ -151,6 +151,12 @@ tcon_info_alloc(bool dir_leases_enabled,
|
||||
#ifdef CONFIG_CIFS_DFS_UPCALL
|
||||
INIT_LIST_HEAD(&ret_buf->dfs_ses_list);
|
||||
#endif
|
||||
+ INIT_LIST_HEAD(&ret_buf->pending_opens);
|
||||
+ INIT_DELAYED_WORK(&ret_buf->query_interfaces,
|
||||
+ smb2_query_server_interfaces);
|
||||
+#ifdef CONFIG_CIFS_DFS_UPCALL
|
||||
+ INIT_DELAYED_WORK(&ret_buf->dfs_cache_work, dfs_cache_refresh);
|
||||
+#endif
|
||||
|
||||
return ret_buf;
|
||||
}
|
Reference in New Issue
Block a user