struct crypto_shash *tfm = NULL;
        __u16   id;
 
-       /* If AUTH extension is disabled, we are done */
-       if (!ep->auth_enable) {
-               ep->auth_hmacs = NULL;
-               return 0;
-       }
-
        /* If the transforms are already allocated, we are done */
        if (ep->auth_hmacs)
                return 0;
 
                        auth_chunks->param_hdr.length =
                                        htons(sizeof(struct sctp_paramhdr) + 2);
                }
+
+               /* Allocate and initialize transorms arrays for supported
+                * HMACs.
+                */
+               err = sctp_auth_init_hmacs(ep, gfp);
+               if (err)
+                       goto nomem;
        }
 
        /* Initialize the base structure. */
        INIT_LIST_HEAD(&ep->endpoint_shared_keys);
        null_key = sctp_auth_shkey_create(0, gfp);
        if (!null_key)
-               goto nomem;
+               goto nomem_shkey;
 
        list_add(&null_key->key_list, &ep->endpoint_shared_keys);
 
-       /* Allocate and initialize transorms arrays for supported HMACs. */
-       err = sctp_auth_init_hmacs(ep, gfp);
-       if (err)
-               goto nomem_hmacs;
-
        /* Add the null key to the endpoint shared keys list and
         * set the hmcas and chunks pointers.
         */
 
        return ep;
 
-nomem_hmacs:
-       sctp_auth_destroy_keys(&ep->endpoint_shared_keys);
+nomem_shkey:
+       sctp_auth_destroy_hmacs(ep->auth_hmacs);
 nomem:
        /* Free all allocations */
        kfree(auth_hmacs);