Skip to content

Commit

Permalink
NFC: Keep socket alive until the DISC PDU is actually sent
Browse files Browse the repository at this point in the history
This patch keeps the socket alive and therefore does not remove
it from the sockets list in the local until the DISC PDU has been
actually sent. Otherwise we would reply with DM PDUs before sending
the DISC one.

Signed-off-by: Thierry Escande <thierry.escande@linux.intel.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
  • Loading branch information
Thierry Escande authored and Samuel Ortiz committed Jun 14, 2013
1 parent 58e3dd1 commit 17f7ae1
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 0 deletions.
1 change: 1 addition & 0 deletions net/nfc/llcp.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

enum llcp_state {
LLCP_CONNECTED = 1, /* wait_for_packet() wants that */
LLCP_DISCONNECTING,
LLCP_CLOSED,
LLCP_BOUND,
LLCP_LISTEN,
Expand Down
7 changes: 7 additions & 0 deletions net/nfc/llcp_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -730,6 +730,13 @@ static void nfc_llcp_tx_work(struct work_struct *work)
DUMP_PREFIX_OFFSET, 16, 1,
skb->data, skb->len, true);

if (ptype == LLCP_PDU_DISC && sk != NULL &&
sk->sk_state == LLCP_DISCONNECTING) {
nfc_llcp_sock_unlink(&local->sockets, sk);
sock_orphan(sk);
sock_put(sk);
}

if (ptype == LLCP_PDU_I)
copy_skb = skb_copy(skb, GFP_ATOMIC);

Expand Down
7 changes: 7 additions & 0 deletions net/nfc/llcp_sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -626,6 +626,13 @@ static int llcp_sock_release(struct socket *sock)

release_sock(sk);

/* Keep this sock alive and therefore do not remove it from the sockets
* list until the DISC PDU has been actually sent. Otherwise we would
* reply with DM PDUs before sending the DISC one.
*/
if (sk->sk_state == LLCP_DISCONNECTING)
return err;

if (sock->type == SOCK_RAW)
nfc_llcp_sock_unlink(&local->raw_sockets, sk);
else
Expand Down

0 comments on commit 17f7ae1

Please sign in to comment.