NFC: Fix LLCP sockets releasing path
The socket local pointer needs to be set to NULL when the adapter is removed or the MAC goes down. If the socket release code is called after such an event, the socket reference count still needs to be decreased in order for the socket to eventually be freed. Signed-off-by: Samuel Ortiz <sameo@linux.intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:

committed by
John W. Linville

parent
47807d3dbb
commit
40c75f81d6
@@ -47,7 +47,7 @@ static void nfc_llcp_socket_release(struct nfc_llcp_local *local)
|
||||
|
||||
/* Release all child sockets */
|
||||
list_for_each_entry_safe(s, n, &parent->list, list) {
|
||||
list_del(&s->list);
|
||||
list_del_init(&s->list);
|
||||
sk = &s->sk;
|
||||
|
||||
lock_sock(sk);
|
||||
@@ -56,9 +56,12 @@ static void nfc_llcp_socket_release(struct nfc_llcp_local *local)
|
||||
nfc_put_device(s->dev);
|
||||
|
||||
sk->sk_state = LLCP_CLOSED;
|
||||
sock_set_flag(sk, SOCK_DEAD);
|
||||
|
||||
release_sock(sk);
|
||||
|
||||
sock_orphan(sk);
|
||||
|
||||
s->local = NULL;
|
||||
}
|
||||
|
||||
parent_sk = &parent->sk;
|
||||
@@ -77,11 +80,12 @@ static void nfc_llcp_socket_release(struct nfc_llcp_local *local)
|
||||
nfc_llcp_accept_unlink(accept_sk);
|
||||
|
||||
accept_sk->sk_state = LLCP_CLOSED;
|
||||
sock_set_flag(accept_sk, SOCK_DEAD);
|
||||
|
||||
release_sock(accept_sk);
|
||||
|
||||
sock_orphan(accept_sk);
|
||||
|
||||
lsk->local = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,9 +93,12 @@ static void nfc_llcp_socket_release(struct nfc_llcp_local *local)
|
||||
nfc_put_device(parent->dev);
|
||||
|
||||
parent_sk->sk_state = LLCP_CLOSED;
|
||||
sock_set_flag(parent_sk, SOCK_DEAD);
|
||||
|
||||
release_sock(parent_sk);
|
||||
|
||||
sock_orphan(parent_sk);
|
||||
|
||||
parent->local = NULL;
|
||||
}
|
||||
|
||||
mutex_unlock(&local->socket_lock);
|
||||
|
Reference in New Issue
Block a user