aboutsummaryrefslogtreecommitdiffstats
path: root/net/nfc/llcp/sock.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/nfc/llcp/sock.c')
-rw-r--r--net/nfc/llcp/sock.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/net/nfc/llcp/sock.c b/net/nfc/llcp/sock.c
index f738ccd535f1..b8bef367ee49 100644
--- a/net/nfc/llcp/sock.c
+++ b/net/nfc/llcp/sock.c
@@ -482,6 +482,34 @@ error:
482 return ret; 482 return ret;
483} 483}
484 484
485static int llcp_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
486 struct msghdr *msg, size_t len)
487{
488 struct sock *sk = sock->sk;
489 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk);
490 int ret;
491
492 pr_debug("sock %p sk %p", sock, sk);
493
494 ret = sock_error(sk);
495 if (ret)
496 return ret;
497
498 if (msg->msg_flags & MSG_OOB)
499 return -EOPNOTSUPP;
500
501 lock_sock(sk);
502
503 if (sk->sk_state != LLCP_CONNECTED) {
504 release_sock(sk);
505 return -ENOTCONN;
506 }
507
508 release_sock(sk);
509
510 return nfc_llcp_send_i_frame(llcp_sock, msg, len);
511}
512
485static int llcp_sock_recvmsg(struct kiocb *iocb, struct socket *sock, 513static int llcp_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
486 struct msghdr *msg, size_t len, int flags) 514 struct msghdr *msg, size_t len, int flags)
487{ 515{
@@ -567,7 +595,7 @@ static const struct proto_ops llcp_sock_ops = {
567 .shutdown = sock_no_shutdown, 595 .shutdown = sock_no_shutdown,
568 .setsockopt = sock_no_setsockopt, 596 .setsockopt = sock_no_setsockopt,
569 .getsockopt = sock_no_getsockopt, 597 .getsockopt = sock_no_getsockopt,
570 .sendmsg = sock_no_sendmsg, 598 .sendmsg = llcp_sock_sendmsg,
571 .recvmsg = llcp_sock_recvmsg, 599 .recvmsg = llcp_sock_recvmsg,
572 .mmap = sock_no_mmap, 600 .mmap = sock_no_mmap,
573}; 601};