aboutsummaryrefslogtreecommitdiffstats
path: root/net/nfc/llcp/sock.c
diff options
context:
space:
mode:
authorSamuel Ortiz <sameo@linux.intel.com>2012-03-04 19:03:48 -0500
committerJohn W. Linville <linville@tuxdriver.com>2012-03-06 15:16:23 -0500
commit0c31835993e622fa9d407807e384c0f9b971d53b (patch)
tree5d5b4f15262f507534fe4ec70cad346e2cc16306 /net/nfc/llcp/sock.c
parent2fbabfa467ce945deb92bf04c745b4d101fc21ee (diff)
NFC: Unlink LLCP child sockets from llcp_sock_release
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>
Diffstat (limited to 'net/nfc/llcp/sock.c')
-rw-r--r--net/nfc/llcp/sock.c16
1 files changed, 3 insertions, 13 deletions
diff --git a/net/nfc/llcp/sock.c b/net/nfc/llcp/sock.c
index b8bef367ee4..d3861773fab 100644
--- a/net/nfc/llcp/sock.c
+++ b/net/nfc/llcp/sock.c
@@ -327,20 +327,10 @@ static int llcp_sock_release(struct socket *sock)
327 327
328 mutex_lock(&local->socket_lock); 328 mutex_lock(&local->socket_lock);
329 329
330 if (llcp_sock == local->sockets[llcp_sock->ssap]) { 330 if (llcp_sock == local->sockets[llcp_sock->ssap])
331 local->sockets[llcp_sock->ssap] = NULL; 331 local->sockets[llcp_sock->ssap] = NULL;
332 } else { 332 else
333 struct nfc_llcp_sock *parent, *s, *n; 333 list_del(&llcp_sock->list);
334
335 parent = local->sockets[llcp_sock->ssap];
336
337 list_for_each_entry_safe(s, n, &parent->list, list)
338 if (llcp_sock == s) {
339 list_del(&s->list);
340 break;
341 }
342
343 }
344 334
345 mutex_unlock(&local->socket_lock); 335 mutex_unlock(&local->socket_lock);
346 336