diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2012-03-04 19:03:48 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-03-06 15:16:23 -0500 |
commit | 0c31835993e622fa9d407807e384c0f9b971d53b (patch) | |
tree | 5d5b4f15262f507534fe4ec70cad346e2cc16306 | |
parent | 2fbabfa467ce945deb92bf04c745b4d101fc21ee (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>
-rw-r--r-- | net/nfc/llcp/sock.c | 16 |
1 files changed, 3 insertions, 13 deletions
diff --git a/net/nfc/llcp/sock.c b/net/nfc/llcp/sock.c index b8bef367ee49..d3861773fab0 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 | ||