Skip to content

Commit 31ca61a

Browse files
author
Samuel Ortiz
committed
NFC: Forward LLCP datagrams to userspace
With connection less PDUs we have to send the SSAP and DSAP as well. Signed-off-by: Samuel Ortiz <[email protected]>
1 parent 968272b commit 31ca61a

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

net/nfc/llcp/sock.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,11 +663,28 @@ static int llcp_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
663663
return -EFAULT;
664664
}
665665

666+
if (sk->sk_type == SOCK_DGRAM && msg->msg_name) {
667+
struct nfc_llcp_ui_cb *ui_cb = nfc_llcp_ui_skb_cb(skb);
668+
struct sockaddr_nfc_llcp sockaddr;
669+
670+
pr_debug("Datagram socket %d %d\n", ui_cb->dsap, ui_cb->ssap);
671+
672+
sockaddr.sa_family = AF_NFC;
673+
sockaddr.nfc_protocol = NFC_PROTO_NFC_DEP;
674+
sockaddr.dsap = ui_cb->dsap;
675+
sockaddr.ssap = ui_cb->ssap;
676+
677+
memcpy(msg->msg_name, &sockaddr, sizeof(sockaddr));
678+
msg->msg_namelen = sizeof(sockaddr);
679+
}
680+
666681
/* Mark read part of skb as used */
667682
if (!(flags & MSG_PEEK)) {
668683

669684
/* SOCK_STREAM: re-queue skb if it contains unreceived data */
670-
if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_RAW) {
685+
if (sk->sk_type == SOCK_STREAM ||
686+
sk->sk_type == SOCK_DGRAM ||
687+
sk->sk_type == SOCK_RAW) {
671688
skb_pull(skb, copied);
672689
if (skb->len) {
673690
skb_queue_head(&sk->sk_receive_queue, skb);

0 commit comments

Comments
 (0)