struct sctp_endpoint *ep = sp->ep;
        struct crypto_shash *tfm = NULL;
        char alg[32];
+       int err;
 
        /* Allocate HMAC for generating cookie. */
        if (!sp->hmac && sp->sctp_hmac_alg) {
        inet_sk_set_state(sk, SCTP_SS_LISTENING);
        if (!ep->base.bind_addr.port) {
                if (sctp_autobind(sk)) {
-                       inet_sk_set_state(sk, SCTP_SS_CLOSED);
-                       return -EAGAIN;
+                       err = -EAGAIN;
+                       goto err;
                }
        } else {
                if (sctp_get_port(sk, inet_sk(sk)->inet_num)) {
-                       inet_sk_set_state(sk, SCTP_SS_CLOSED);
-                       return -EADDRINUSE;
+                       err = -EADDRINUSE;
+                       goto err;
                }
        }
 
        WRITE_ONCE(sk->sk_max_ack_backlog, backlog);
-       return sctp_hash_endpoint(ep);
+       err = sctp_hash_endpoint(ep);
+       if (err)
+               goto err;
+
+       return 0;
+err:
+       inet_sk_set_state(sk, SCTP_SS_CLOSED);
+       return err;
 }
 
 /*