summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/smb/server/connection.c2
-rw-r--r--fs/smb/server/connection.h3
-rw-r--r--fs/smb/server/mgmt/user_session.c4
-rw-r--r--fs/smb/server/transport_tcp.c1
4 files changed, 7 insertions, 3 deletions
diff --git a/fs/smb/server/connection.c b/fs/smb/server/connection.c
index 3f8cc4998da5..d1cc725eeb06 100644
--- a/fs/smb/server/connection.c
+++ b/fs/smb/server/connection.c
@@ -114,7 +114,7 @@ static int proc_show_clients(struct seq_file *m, void *v)
sessions++;
rcu_read_unlock();
#if IS_ENABLED(CONFIG_IPV6)
- if (!conn->inet_addr)
+ if (conn->is_ipv6)
seq_printf(m, "client:\t%pI6c\n", &conn->inet6_addr);
else
#endif
diff --git a/fs/smb/server/connection.h b/fs/smb/server/connection.h
index 371f17b4f02a..2026a2afa5e4 100644
--- a/fs/smb/server/connection.h
+++ b/fs/smb/server/connection.h
@@ -68,6 +68,9 @@ struct ksmbd_conn {
u8 inet6_addr[16];
#endif
};
+#if IS_ENABLED(CONFIG_IPV6)
+ bool is_ipv6;
+#endif
unsigned int inet_hash;
char *request_buf;
struct ksmbd_transport *transport;
diff --git a/fs/smb/server/mgmt/user_session.c b/fs/smb/server/mgmt/user_session.c
index 44dc3f800cd4..1321cd6c84e7 100644
--- a/fs/smb/server/mgmt/user_session.c
+++ b/fs/smb/server/mgmt/user_session.c
@@ -130,7 +130,7 @@ static int show_proc_session(struct seq_file *m, void *v)
const char *name;
#if IS_ENABLED(CONFIG_IPV6)
- if (chan->conn->inet_addr)
+ if (!chan->conn->is_ipv6)
seq_printf(m, "client:\t%pI4\n",
&chan->conn->inet_addr);
else
@@ -231,7 +231,7 @@ static int show_proc_sessions(struct seq_file *m, void *v)
ksmbd_user_session_get(session);
#if IS_ENABLED(CONFIG_IPV6)
- if (!chan->conn->inet_addr)
+ if (chan->conn->is_ipv6)
seq_printf(m, "client:\t%pI6c\n", &chan->conn->inet6_addr);
else
#endif
diff --git a/fs/smb/server/transport_tcp.c b/fs/smb/server/transport_tcp.c
index e6f663acf5f8..488ca113b431 100644
--- a/fs/smb/server/transport_tcp.c
+++ b/fs/smb/server/transport_tcp.c
@@ -77,6 +77,7 @@ static struct tcp_transport *alloc_transport(struct socket *client_sk)
if (client_sk->sk->sk_family == AF_INET6) {
memcpy(&conn->inet6_addr, &client_sk->sk->sk_v6_daddr, 16);
conn->inet_hash = ipv6_addr_hash(&client_sk->sk->sk_v6_daddr);
+ conn->is_ipv6 = true;
} else {
conn->inet_addr = inet_sk(client_sk->sk)->inet_daddr;
conn->inet_hash = ipv4_addr_hash(inet_sk(client_sk->sk)->inet_daddr);