NFC: Unlink LLCP child sockets from llcp_sock_release
authorSamuel Ortiz <sameo@linux.intel.com>
Mon, 5 Mar 2012 00:03:48 +0000 (01:03 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 6 Mar 2012 20:16:23 +0000 (15:16 -0500)
The parent socket (the bound one) could be freed before its children, so
we should unlink the children without trying to reach it through the parent.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/nfc/llcp/sock.c

index b8bef367ee4933025fb7d656d40a2dc57851bebe..d3861773fab0a1b946bc7e90e0222d63db2c7c5e 100644 (file)
@@ -327,20 +327,10 @@ static int llcp_sock_release(struct socket *sock)
 
        mutex_lock(&local->socket_lock);
 
-       if (llcp_sock == local->sockets[llcp_sock->ssap]) {
+       if (llcp_sock == local->sockets[llcp_sock->ssap])
                local->sockets[llcp_sock->ssap] = NULL;
-       } else {
-               struct nfc_llcp_sock *parent, *s, *n;
-
-               parent = local->sockets[llcp_sock->ssap];
-
-               list_for_each_entry_safe(s, n, &parent->list, list)
-                       if (llcp_sock == s) {
-                               list_del(&s->list);
-                               break;
-                       }
-
-       }
+       else
+               list_del(&llcp_sock->list);
 
        mutex_unlock(&local->socket_lock);