* [PATCH v2 1/3] smb: client: Protect ses->chans update with chan_lock spin lock
@ 2023-11-27 5:21 Pierre Mariani
2023-11-27 5:22 ` [PATCH v2 2/3] smb: client: Protect tcon->status with tc_lock " Pierre Mariani
2023-11-27 5:22 ` [PATCH v2 3/3] smb: client: Fix checkpatch whitespace errors and warnings Pierre Mariani
0 siblings, 2 replies; 4+ messages in thread
From: Pierre Mariani @ 2023-11-27 5:21 UTC (permalink / raw)
To: linux-cifs; +Cc: smfrench, pierre.mariani
Protect the update of ses->chans with chan_lock spin lock as per documentation
from cifsglob.h.
Fixes Coverity 1561738.
Signed-off-by: Pierre Mariani <pierre.mariani@gmail.com>
---
fs/smb/client/connect.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/fs/smb/client/connect.c b/fs/smb/client/connect.c
index f896f60c924b..f7d436daaa80 100644
--- a/fs/smb/client/connect.c
+++ b/fs/smb/client/connect.c
@@ -2056,6 +2056,7 @@ void __cifs_put_smb_ses(struct cifs_ses *ses)
spin_unlock(&cifs_tcp_ses_lock);
/* close any extra channels */
+ spin_lock(&ses->chan_lock);
for (i = 1; i < ses->chan_count; i++) {
if (ses->chans[i].iface) {
kref_put(&ses->chans[i].iface->refcount, release_iface);
@@ -2064,11 +2065,14 @@ void __cifs_put_smb_ses(struct cifs_ses *ses)
cifs_put_tcp_session(ses->chans[i].server, 0);
ses->chans[i].server = NULL;
}
+ spin_unlock(&ses->chan_lock);
/* we now account for primary channel in iface->refcount */
if (ses->chans[0].iface) {
kref_put(&ses->chans[0].iface->refcount, release_iface);
+ spin_lock(&ses->chan_lock);
ses->chans[0].server = NULL;
+ spin_unlock(&ses->chan_lock);
}
sesInfoFree(ses);
--
2.39.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2 2/3] smb: client: Protect tcon->status with tc_lock spin lock
2023-11-27 5:21 [PATCH v2 1/3] smb: client: Protect ses->chans update with chan_lock spin lock Pierre Mariani
@ 2023-11-27 5:22 ` Pierre Mariani
2024-01-09 23:44 ` Steve French
2023-11-27 5:22 ` [PATCH v2 3/3] smb: client: Fix checkpatch whitespace errors and warnings Pierre Mariani
1 sibling, 1 reply; 4+ messages in thread
From: Pierre Mariani @ 2023-11-27 5:22 UTC (permalink / raw)
To: linux-cifs; +Cc: smfrench, pierre.mariani
Protect the update of tcon->status with tc_lock spin lock as per documentation
from cifsglob.h.
Fixes Coverity 1560722 Data race condition.
Signed-off-by: Pierre Mariani <pierre.mariani@gmail.com>
---
fs/smb/client/connect.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/fs/smb/client/connect.c b/fs/smb/client/connect.c
index f7d436daaa80..26e3eeda0c4c 100644
--- a/fs/smb/client/connect.c
+++ b/fs/smb/client/connect.c
@@ -2711,7 +2711,9 @@ cifs_get_tcon(struct cifs_ses *ses, struct smb3_fs_context *ctx)
tcon->nodelete = ctx->nodelete;
tcon->local_lease = ctx->local_lease;
INIT_LIST_HEAD(&tcon->pending_opens);
+ spin_lock(&tcon->tc_lock);
tcon->status = TID_GOOD;
+ spin_unlock(&tcon->tc_lock);
INIT_DELAYED_WORK(&tcon->query_interfaces,
smb2_query_server_interfaces);
--
2.39.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2 3/3] smb: client: Fix checkpatch whitespace errors and warnings
2023-11-27 5:21 [PATCH v2 1/3] smb: client: Protect ses->chans update with chan_lock spin lock Pierre Mariani
2023-11-27 5:22 ` [PATCH v2 2/3] smb: client: Protect tcon->status with tc_lock " Pierre Mariani
@ 2023-11-27 5:22 ` Pierre Mariani
1 sibling, 0 replies; 4+ messages in thread
From: Pierre Mariani @ 2023-11-27 5:22 UTC (permalink / raw)
To: linux-cifs; +Cc: smfrench, pierre.mariani
Fixes no-op checkpatch errors and warnings.
Signed-off-by: Pierre Mariani <pierre.mariani@gmail.com>
---
fs/smb/client/connect.c | 25 +++++++++++++++++--------
1 file changed, 17 insertions(+), 8 deletions(-)
diff --git a/fs/smb/client/connect.c b/fs/smb/client/connect.c
index 26e3eeda0c4c..b014488d5232 100644
--- a/fs/smb/client/connect.c
+++ b/fs/smb/client/connect.c
@@ -482,6 +482,7 @@ static int reconnect_target_unlocked(struct TCP_Server_Info *server, struct dfs_
static int reconnect_dfs_server(struct TCP_Server_Info *server)
{
struct dfs_cache_tgt_iterator *target_hint = NULL;
+
DFS_CACHE_TGT_LIST(tl);
int num_targets = 0;
int rc = 0;
@@ -750,6 +751,7 @@ cifs_read_from_socket(struct TCP_Server_Info *server, char *buf,
{
struct msghdr smb_msg = {};
struct kvec iov = {.iov_base = buf, .iov_len = to_read};
+
iov_iter_kvec(&smb_msg.msg_iter, ITER_DEST, &iov, 1, to_read);
return cifs_readv_from_socket(server, &smb_msg);
@@ -1400,11 +1402,13 @@ cifs_match_ipaddr(struct sockaddr *srcaddr, struct sockaddr *rhs)
case AF_INET: {
struct sockaddr_in *saddr4 = (struct sockaddr_in *)srcaddr;
struct sockaddr_in *vaddr4 = (struct sockaddr_in *)rhs;
+
return (saddr4->sin_addr.s_addr == vaddr4->sin_addr.s_addr);
}
case AF_INET6: {
struct sockaddr_in6 *saddr6 = (struct sockaddr_in6 *)srcaddr;
struct sockaddr_in6 *vaddr6 = (struct sockaddr_in6 *)rhs;
+
return (ipv6_addr_equal(&saddr6->sin6_addr, &vaddr6->sin6_addr)
&& saddr6->sin6_scope_id == vaddr6->sin6_scope_id);
}
@@ -2606,8 +2610,8 @@ cifs_get_tcon(struct cifs_ses *ses, struct smb3_fs_context *ctx)
rc = -EOPNOTSUPP;
goto out_fail;
} else {
- cifs_dbg(VFS, "Check vers= mount option. SMB3.11 "
- "disabled but required for POSIX extensions\n");
+ cifs_dbg(VFS,
+ "Check vers= mount option. SMB3.11 disabled but required for POSIX extensions\n");
rc = -EOPNOTSUPP;
goto out_fail;
}
@@ -2752,7 +2756,6 @@ cifs_put_tlink(struct tcon_link *tlink)
if (!IS_ERR(tlink_tcon(tlink)))
cifs_put_tcon(tlink_tcon(tlink));
kfree(tlink);
- return;
}
static int
@@ -2893,6 +2896,7 @@ static inline void
cifs_reclassify_socket4(struct socket *sock)
{
struct sock *sk = sock->sk;
+
BUG_ON(!sock_allow_reclassification(sk));
sock_lock_init_class_and_name(sk, "slock-AF_INET-CIFS",
&cifs_slock_key[0], "sk_lock-AF_INET-CIFS", &cifs_key[0]);
@@ -2902,6 +2906,7 @@ static inline void
cifs_reclassify_socket6(struct socket *sock)
{
struct sock *sk = sock->sk;
+
BUG_ON(!sock_allow_reclassification(sk));
sock_lock_init_class_and_name(sk, "slock-AF_INET6-CIFS",
&cifs_slock_key[1], "sk_lock-AF_INET6-CIFS", &cifs_key[1]);
@@ -2936,15 +2941,18 @@ static int
bind_socket(struct TCP_Server_Info *server)
{
int rc = 0;
+
if (server->srcaddr.ss_family != AF_UNSPEC) {
/* Bind to the specified local IP address */
struct socket *socket = server->ssocket;
+
rc = kernel_bind(socket,
(struct sockaddr *) &server->srcaddr,
sizeof(server->srcaddr));
if (rc < 0) {
struct sockaddr_in *saddr4;
struct sockaddr_in6 *saddr6;
+
saddr4 = (struct sockaddr_in *)&server->srcaddr;
saddr6 = (struct sockaddr_in6 *)&server->srcaddr;
if (saddr6->sin6_family == AF_INET6)
@@ -3174,6 +3182,7 @@ void reset_cifs_unix_caps(unsigned int xid, struct cifs_tcon *tcon,
if (!CIFSSMBQFSUnixInfo(xid, tcon)) {
__u64 cap = le64_to_cpu(tcon->fsUnixInfo.Capability);
+
cifs_dbg(FYI, "unix caps which server supports %lld\n", cap);
/*
* check for reconnect case in which we do not
@@ -3677,7 +3686,7 @@ CIFSTCon(const unsigned int xid, struct cifs_ses *ses,
smb_buffer_response = smb_buffer;
header_assemble(smb_buffer, SMB_COM_TREE_CONNECT_ANDX,
- NULL /*no tid */ , 4 /*wct */ );
+ NULL /*no tid */, 4 /*wct */);
smb_buffer->Mid = get_next_mid(ses->server);
smb_buffer->Uid = ses->Suid;
@@ -3696,12 +3705,12 @@ CIFSTCon(const unsigned int xid, struct cifs_ses *ses,
if (ses->server->sign)
smb_buffer->Flags2 |= SMBFLG2_SECURITY_SIGNATURE;
- if (ses->capabilities & CAP_STATUS32) {
+ if (ses->capabilities & CAP_STATUS32)
smb_buffer->Flags2 |= SMBFLG2_ERR_STATUS;
- }
- if (ses->capabilities & CAP_DFS) {
+
+ if (ses->capabilities & CAP_DFS)
smb_buffer->Flags2 |= SMBFLG2_DFS;
- }
+
if (ses->capabilities & CAP_UNICODE) {
smb_buffer->Flags2 |= SMBFLG2_UNICODE;
length =
--
2.39.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2 2/3] smb: client: Protect tcon->status with tc_lock spin lock
2023-11-27 5:22 ` [PATCH v2 2/3] smb: client: Protect tcon->status with tc_lock " Pierre Mariani
@ 2024-01-09 23:44 ` Steve French
0 siblings, 0 replies; 4+ messages in thread
From: Steve French @ 2024-01-09 23:44 UTC (permalink / raw)
To: Pierre Mariani; +Cc: linux-cifs
presumably this is unneeded since in this code path we are
initializing - we have a newly allocated tcon which hasn't been
returned to anyone yet so no other threads could update those fields
(until e.g. worker threads or launched which doesn't happen until a
few lines lower, or the tcon returned)
On Sun, Nov 26, 2023 at 11:23 PM Pierre Mariani
<pierre.mariani@gmail.com> wrote:
>
> Protect the update of tcon->status with tc_lock spin lock as per documentation
> from cifsglob.h.
> Fixes Coverity 1560722 Data race condition.
>
> Signed-off-by: Pierre Mariani <pierre.mariani@gmail.com>
> ---
> fs/smb/client/connect.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/fs/smb/client/connect.c b/fs/smb/client/connect.c
> index f7d436daaa80..26e3eeda0c4c 100644
> --- a/fs/smb/client/connect.c
> +++ b/fs/smb/client/connect.c
> @@ -2711,7 +2711,9 @@ cifs_get_tcon(struct cifs_ses *ses, struct smb3_fs_context *ctx)
> tcon->nodelete = ctx->nodelete;
> tcon->local_lease = ctx->local_lease;
> INIT_LIST_HEAD(&tcon->pending_opens);
> + spin_lock(&tcon->tc_lock);
> tcon->status = TID_GOOD;
> + spin_unlock(&tcon->tc_lock);
>
> INIT_DELAYED_WORK(&tcon->query_interfaces,
> smb2_query_server_interfaces);
> --
> 2.39.2
>
--
Thanks,
Steve
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2024-01-09 23:44 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-27 5:21 [PATCH v2 1/3] smb: client: Protect ses->chans update with chan_lock spin lock Pierre Mariani
2023-11-27 5:22 ` [PATCH v2 2/3] smb: client: Protect tcon->status with tc_lock " Pierre Mariani
2024-01-09 23:44 ` Steve French
2023-11-27 5:22 ` [PATCH v2 3/3] smb: client: Fix checkpatch whitespace errors and warnings Pierre Mariani
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).