Skip to content

Commit bceea66

Browse files
committed
Merge tag 'v6.12-rc6-smb3-client-fix' of git://git.samba.org/sfrench/cifs-2.6
Pull smb client fix from Steve French: "Fix net namespace refcount use after free issue" * tag 'v6.12-rc6-smb3-client-fix' of git://git.samba.org/sfrench/cifs-2.6: smb: client: Fix use-after-free of network namespace.
2 parents a58f4dd + ef7134c commit bceea66

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

fs/smb/client/connect.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1037,6 +1037,7 @@ clean_demultiplex_info(struct TCP_Server_Info *server)
10371037
*/
10381038
}
10391039

1040+
put_net(cifs_net_ns(server));
10401041
kfree(server->leaf_fullpath);
10411042
kfree(server);
10421043

@@ -1635,8 +1636,6 @@ cifs_put_tcp_session(struct TCP_Server_Info *server, int from_reconnect)
16351636
/* srv_count can never go negative */
16361637
WARN_ON(server->srv_count < 0);
16371638

1638-
put_net(cifs_net_ns(server));
1639-
16401639
list_del_init(&server->tcp_ses_list);
16411640
spin_unlock(&cifs_tcp_ses_lock);
16421641

@@ -3070,13 +3069,22 @@ generic_ip_connect(struct TCP_Server_Info *server)
30703069
if (server->ssocket) {
30713070
socket = server->ssocket;
30723071
} else {
3073-
rc = __sock_create(cifs_net_ns(server), sfamily, SOCK_STREAM,
3072+
struct net *net = cifs_net_ns(server);
3073+
struct sock *sk;
3074+
3075+
rc = __sock_create(net, sfamily, SOCK_STREAM,
30743076
IPPROTO_TCP, &server->ssocket, 1);
30753077
if (rc < 0) {
30763078
cifs_server_dbg(VFS, "Error %d creating socket\n", rc);
30773079
return rc;
30783080
}
30793081

3082+
sk = server->ssocket->sk;
3083+
__netns_tracker_free(net, &sk->ns_tracker, false);
3084+
sk->sk_net_refcnt = 1;
3085+
get_net_track(net, &sk->ns_tracker, GFP_KERNEL);
3086+
sock_inuse_add(net, 1);
3087+
30803088
/* BB other socket options to set KEEPALIVE, NODELAY? */
30813089
cifs_dbg(FYI, "Socket created\n");
30823090
socket = server->ssocket;

0 commit comments

Comments
 (0)