]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
nfc: llcp: simplify llcp_sock_connect() error paths
authorKrzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
Wed, 2 Mar 2022 19:25:19 +0000 (20:25 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jul 2023 06:37:11 +0000 (08:37 +0200)
[ Upstream commit ec10fd154d934cc4195da3cbd017a12817b41d51 ]

The llcp_sock_connect() error paths were using a mixed way of central
exit (goto) and cleanup

Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Stable-dep-of: 6709d4b7bc2e ("net: nfc: Fix use-after-free caused by nfc_llcp_find_local")
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/nfc/llcp_sock.c

index bd2174699af974ebf65a0be41adf86847b98cb0e..1c1748b86fae75e9bce3e6688ac862cce3ea18ef 100644 (file)
@@ -712,10 +712,8 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr,
        llcp_sock->local = nfc_llcp_local_get(local);
        llcp_sock->ssap = nfc_llcp_get_local_ssap(local);
        if (llcp_sock->ssap == LLCP_SAP_MAX) {
-               nfc_llcp_local_put(llcp_sock->local);
-               llcp_sock->local = NULL;
                ret = -ENOMEM;
-               goto put_dev;
+               goto sock_llcp_put_local;
        }
 
        llcp_sock->reserved_ssap = llcp_sock->ssap;
@@ -760,8 +758,11 @@ sock_unlink:
 
 sock_llcp_release:
        nfc_llcp_put_ssap(local, llcp_sock->ssap);
+
+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);