__u32   sub_auth[3];            /* Subauth value for Security ID */
        __u32   smb2_max_credits;       /* MAX credits */
        __u32   smbd_max_io_size;       /* smbd read write size */
-       __u32   reserved[127];          /* Reserved room */
+       __u32   max_connections;        /* Number of maximum simultaneous connections */
+       __u32   reserved[126];          /* Reserved room */
        __u32   ifc_list_sz;            /* interfaces list size */
        __s8    ____payload[];
 };
 
        if (req->smbd_max_io_size)
                init_smbd_max_io_size(req->smbd_max_io_size);
 
+       if (req->max_connections)
+               server_conf.max_connections = req->max_connections;
+
        ret = ksmbd_set_netbios_name(req->netbios_name);
        ret |= ksmbd_set_server_string(req->server_string);
        ret |= ksmbd_set_work_group(req->work_group);
 
 #define IFACE_STATE_DOWN               BIT(0)
 #define IFACE_STATE_CONFIGURED         BIT(1)
 
+static atomic_t active_num_conn;
+
 struct interface {
        struct task_struct      *ksmbd_kthread;
        struct socket           *ksmbd_socket;
        struct tcp_transport *t;
 
        t = alloc_transport(client_sk);
-       if (!t)
+       if (!t) {
+               sock_release(client_sk);
                return -ENOMEM;
+       }
 
        csin = KSMBD_TCP_PEER_SOCKADDR(KSMBD_TRANS(t)->conn);
        if (kernel_getpeername(client_sk, csin) < 0) {
                        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",
+                                           atomic_read(&active_num_conn));
+                       atomic_dec(&active_num_conn);
+                       sock_release(client_sk);
+                       continue;
+               }
+
                ksmbd_debug(CONN, "connect success: accepted new connection\n");
                client_sk->sk->sk_rcvtimeo = KSMBD_TCP_RECV_TIMEOUT;
                client_sk->sk->sk_sndtimeo = KSMBD_TCP_SEND_TIMEOUT;
 static void ksmbd_tcp_disconnect(struct ksmbd_transport *t)
 {
        free_transport(TCP_TRANS(t));
+       if (server_conf.max_connections)
+               atomic_dec(&active_num_conn);
 }
 
 static void tcp_destroy_socket(struct socket *ksmbd_socket)