return NULL;
        }
 
+       conn->inet_addr = inet_sk(client_sk->sk)->inet_daddr;
        conn->transport = KSMBD_TRANS(t);
        KSMBD_TRANS(t)->conn = conn;
        KSMBD_TRANS(t)->ops = &ksmbd_tcp_transport_ops;
 {
        struct socket *client_sk = NULL;
        struct interface *iface = (struct interface *)p;
+       struct inet_sock *csk_inet;
+       struct ksmbd_conn *conn;
        int ret;
 
        while (!kthread_should_stop()) {
                        continue;
                }
 
+               /*
+                * Limits repeated connections from clients with the same IP.
+                */
+               csk_inet = inet_sk(client_sk->sk);
+               down_read(&conn_list_lock);
+               list_for_each_entry(conn, &conn_list, conns_list)
+                       if (csk_inet->inet_daddr == conn->inet_addr) {
+                               ret = -EAGAIN;
+                               break;
+                       }
+               up_read(&conn_list_lock);
+               if (ret == -EAGAIN)
+                       continue;
+
                if (server_conf.max_connections &&
                    atomic_inc_return(&active_num_conn) >= server_conf.max_connections) {
                        pr_info_ratelimited("Limit the maximum number of connections(%u)\n",