|
@@ -1568,6 +1568,9 @@ cifs_find_tcp_session(struct sockaddr *addr, struct smb_vol *vol)
|
|
|
|
|
|
spin_lock(&cifs_tcp_ses_lock);
|
|
spin_lock(&cifs_tcp_ses_lock);
|
|
list_for_each_entry(server, &cifs_tcp_ses_list, tcp_ses_list) {
|
|
list_for_each_entry(server, &cifs_tcp_ses_list, tcp_ses_list) {
|
|
|
|
+ if (!net_eq(cifs_net_ns(server), current->nsproxy->net_ns))
|
|
|
|
+ continue;
|
|
|
|
+
|
|
if (!match_address(server, addr,
|
|
if (!match_address(server, addr,
|
|
(struct sockaddr *)&vol->srcaddr))
|
|
(struct sockaddr *)&vol->srcaddr))
|
|
continue;
|
|
continue;
|
|
@@ -1598,6 +1601,8 @@ cifs_put_tcp_session(struct TCP_Server_Info *server)
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ put_net(cifs_net_ns(server));
|
|
|
|
+
|
|
list_del_init(&server->tcp_ses_list);
|
|
list_del_init(&server->tcp_ses_list);
|
|
spin_unlock(&cifs_tcp_ses_lock);
|
|
spin_unlock(&cifs_tcp_ses_lock);
|
|
|
|
|
|
@@ -1672,6 +1677,7 @@ cifs_get_tcp_session(struct smb_vol *volume_info)
|
|
goto out_err;
|
|
goto out_err;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ cifs_set_net_ns(tcp_ses, get_net(current->nsproxy->net_ns));
|
|
tcp_ses->hostname = extract_hostname(volume_info->UNC);
|
|
tcp_ses->hostname = extract_hostname(volume_info->UNC);
|
|
if (IS_ERR(tcp_ses->hostname)) {
|
|
if (IS_ERR(tcp_ses->hostname)) {
|
|
rc = PTR_ERR(tcp_ses->hostname);
|
|
rc = PTR_ERR(tcp_ses->hostname);
|
|
@@ -1752,6 +1758,8 @@ cifs_get_tcp_session(struct smb_vol *volume_info)
|
|
out_err_crypto_release:
|
|
out_err_crypto_release:
|
|
cifs_crypto_shash_release(tcp_ses);
|
|
cifs_crypto_shash_release(tcp_ses);
|
|
|
|
|
|
|
|
+ put_net(cifs_net_ns(tcp_ses));
|
|
|
|
+
|
|
out_err:
|
|
out_err:
|
|
if (tcp_ses) {
|
|
if (tcp_ses) {
|
|
if (!IS_ERR(tcp_ses->hostname))
|
|
if (!IS_ERR(tcp_ses->hostname))
|
|
@@ -2263,8 +2271,8 @@ generic_ip_connect(struct TCP_Server_Info *server)
|
|
}
|
|
}
|
|
|
|
|
|
if (socket == NULL) {
|
|
if (socket == NULL) {
|
|
- rc = sock_create_kern(sfamily, SOCK_STREAM,
|
|
|
|
- IPPROTO_TCP, &socket);
|
|
|
|
|
|
+ rc = __sock_create(cifs_net_ns(server), sfamily, SOCK_STREAM,
|
|
|
|
+ IPPROTO_TCP, &socket, 1);
|
|
if (rc < 0) {
|
|
if (rc < 0) {
|
|
cERROR(1, "Error %d creating socket", rc);
|
|
cERROR(1, "Error %d creating socket", rc);
|
|
server->ssocket = NULL;
|
|
server->ssocket = NULL;
|