llcp_sock->service_name_len,
                                          GFP_KERNEL);
        if (!llcp_sock->service_name) {
-               nfc_llcp_local_put(llcp_sock->local);
-               llcp_sock->local = NULL;
-               llcp_sock->dev = NULL;
                ret = -ENOMEM;
-               goto put_dev;
+               goto sock_llcp_put_local;
        }
        llcp_sock->ssap = nfc_llcp_get_sdp_ssap(local, llcp_sock);
        if (llcp_sock->ssap == LLCP_SAP_MAX) {
-               nfc_llcp_local_put(llcp_sock->local);
-               llcp_sock->local = NULL;
-               kfree(llcp_sock->service_name);
-               llcp_sock->service_name = NULL;
-               llcp_sock->dev = NULL;
                ret = -EADDRINUSE;
-               goto put_dev;
+               goto free_service_name;
        }
 
        llcp_sock->reserved_ssap = llcp_sock->ssap;
        pr_debug("Socket bound to SAP %d\n", llcp_sock->ssap);
 
        sk->sk_state = LLCP_BOUND;
+       nfc_put_device(dev);
+       release_sock(sk);
+
+       return 0;
+
+free_service_name:
+       kfree(llcp_sock->service_name);
+       llcp_sock->service_name = NULL;
+
+sock_llcp_put_local:
+       nfc_llcp_local_put(llcp_sock->local);
+       llcp_sock->local = NULL;
+       llcp_sock->dev = NULL;
 
 put_dev:
        nfc_put_device(dev);