linux/net/nfc/llcp_sock.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * Copyright (C) 2011  Intel Corporation. All rights reserved.
   4 */
   5
   6#define pr_fmt(fmt) "llcp: %s: " fmt, __func__
   7
   8#include <linux/init.h>
   9#include <linux/kernel.h>
  10#include <linux/module.h>
  11#include <linux/nfc.h>
  12#include <linux/sched/signal.h>
  13
  14#include "nfc.h"
  15#include "llcp.h"
  16
  17static int sock_wait_state(struct sock *sk, int state, unsigned long timeo)
  18{
  19        DECLARE_WAITQUEUE(wait, current);
  20        int err = 0;
  21
  22        pr_debug("sk %p", sk);
  23
  24        add_wait_queue(sk_sleep(sk), &wait);
  25        set_current_state(TASK_INTERRUPTIBLE);
  26
  27        while (sk->sk_state != state) {
  28                if (!timeo) {
  29                        err = -EINPROGRESS;
  30                        break;
  31                }
  32
  33                if (signal_pending(current)) {
  34                        err = sock_intr_errno(timeo);
  35                        break;
  36                }
  37
  38                release_sock(sk);
  39                timeo = schedule_timeout(timeo);
  40                lock_sock(sk);
  41                set_current_state(TASK_INTERRUPTIBLE);
  42
  43                err = sock_error(sk);
  44                if (err)
  45                        break;
  46        }
  47
  48        __set_current_state(TASK_RUNNING);
  49        remove_wait_queue(sk_sleep(sk), &wait);
  50        return err;
  51}
  52
  53static struct proto llcp_sock_proto = {
  54        .name     = "NFC_LLCP",
  55        .owner    = THIS_MODULE,
  56        .obj_size = sizeof(struct nfc_llcp_sock),
  57};
  58
  59static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
  60{
  61        struct sock *sk = sock->sk;
  62        struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk);
  63        struct nfc_llcp_local *local;
  64        struct nfc_dev *dev;
  65        struct sockaddr_nfc_llcp llcp_addr;
  66        int len, ret = 0;
  67
  68        if (!addr || alen < offsetofend(struct sockaddr, sa_family) ||
  69            addr->sa_family != AF_NFC)
  70                return -EINVAL;
  71
  72        pr_debug("sk %p addr %p family %d\n", sk, addr, addr->sa_family);
  73
  74        memset(&llcp_addr, 0, sizeof(llcp_addr));
  75        len = min_t(unsigned int, sizeof(llcp_addr), alen);
  76        memcpy(&llcp_addr, addr, len);
  77
  78        /* This is going to be a listening socket, dsap must be 0 */
  79        if (llcp_addr.dsap != 0)
  80                return -EINVAL;
  81
  82        lock_sock(sk);
  83
  84        if (sk->sk_state != LLCP_CLOSED) {
  85                ret = -EBADFD;
  86                goto error;
  87        }
  88
  89        dev = nfc_get_device(llcp_addr.dev_idx);
  90        if (dev == NULL) {
  91                ret = -ENODEV;
  92                goto error;
  93        }
  94
  95        local = nfc_llcp_find_local(dev);
  96        if (local == NULL) {
  97                ret = -ENODEV;
  98                goto put_dev;
  99        }
 100
 101        llcp_sock->dev = dev;
 102        llcp_sock->local = nfc_llcp_local_get(local);
 103        llcp_sock->nfc_protocol = llcp_addr.nfc_protocol;
 104        llcp_sock->service_name_len = min_t(unsigned int,
 105                                            llcp_addr.service_name_len,
 106                                            NFC_LLCP_MAX_SERVICE_NAME);
 107        llcp_sock->service_name = kmemdup(llcp_addr.service_name,
 108                                          llcp_sock->service_name_len,
 109                                          GFP_KERNEL);
 110
 111        llcp_sock->ssap = nfc_llcp_get_sdp_ssap(local, llcp_sock);
 112        if (llcp_sock->ssap == LLCP_SAP_MAX) {
 113                ret = -EADDRINUSE;
 114                goto put_dev;
 115        }
 116
 117        llcp_sock->reserved_ssap = llcp_sock->ssap;
 118
 119        nfc_llcp_sock_link(&local->sockets, sk);
 120
 121        pr_debug("Socket bound to SAP %d\n", llcp_sock->ssap);
 122
 123        sk->sk_state = LLCP_BOUND;
 124
 125put_dev:
 126        nfc_put_device(dev);
 127
 128error:
 129        release_sock(sk);
 130        return ret;
 131}
 132
 133static int llcp_raw_sock_bind(struct socket *sock, struct sockaddr *addr,
 134                              int alen)
 135{
 136        struct sock *sk = sock->sk;
 137        struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk);
 138        struct nfc_llcp_local *local;
 139        struct nfc_dev *dev;
 140        struct sockaddr_nfc_llcp llcp_addr;
 141        int len, ret = 0;
 142
 143        if (!addr || alen < offsetofend(struct sockaddr, sa_family) ||
 144            addr->sa_family != AF_NFC)
 145                return -EINVAL;
 146
 147        pr_debug("sk %p addr %p family %d\n", sk, addr, addr->sa_family);
 148
 149        memset(&llcp_addr, 0, sizeof(llcp_addr));
 150        len = min_t(unsigned int, sizeof(llcp_addr), alen);
 151        memcpy(&llcp_addr, addr, len);
 152
 153        lock_sock(sk);
 154
 155        if (sk->sk_state != LLCP_CLOSED) {
 156                ret = -EBADFD;
 157                goto error;
 158        }
 159
 160        dev = nfc_get_device(llcp_addr.dev_idx);
 161        if (dev == NULL) {
 162                ret = -ENODEV;
 163                goto error;
 164        }
 165
 166        local = nfc_llcp_find_local(dev);
 167        if (local == NULL) {
 168                ret = -ENODEV;
 169                goto put_dev;
 170        }
 171
 172        llcp_sock->dev = dev;
 173        llcp_sock->local = nfc_llcp_local_get(local);
 174        llcp_sock->nfc_protocol = llcp_addr.nfc_protocol;
 175
 176        nfc_llcp_sock_link(&local->raw_sockets, sk);
 177
 178        sk->sk_state = LLCP_BOUND;
 179
 180put_dev:
 181        nfc_put_device(dev);
 182
 183error:
 184        release_sock(sk);
 185        return ret;
 186}
 187
 188static int llcp_sock_listen(struct socket *sock, int backlog)
 189{
 190        struct sock *sk = sock->sk;
 191        int ret = 0;
 192
 193        pr_debug("sk %p backlog %d\n", sk, backlog);
 194
 195        lock_sock(sk);
 196
 197        if ((sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM) ||
 198            sk->sk_state != LLCP_BOUND) {
 199                ret = -EBADFD;
 200                goto error;
 201        }
 202
 203        sk->sk_max_ack_backlog = backlog;
 204        sk->sk_ack_backlog = 0;
 205
 206        pr_debug("Socket listening\n");
 207        sk->sk_state = LLCP_LISTEN;
 208
 209error:
 210        release_sock(sk);
 211
 212        return ret;
 213}
 214
 215static int nfc_llcp_setsockopt(struct socket *sock, int level, int optname,
 216                               char __user *optval, unsigned int optlen)
 217{
 218        struct sock *sk = sock->sk;
 219        struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk);
 220        u32 opt;
 221        int err = 0;
 222
 223        pr_debug("%p optname %d\n", sk, optname);
 224
 225        if (level != SOL_NFC)
 226                return -ENOPROTOOPT;
 227
 228        lock_sock(sk);
 229
 230        switch (optname) {
 231        case NFC_LLCP_RW:
 232                if (sk->sk_state == LLCP_CONNECTED ||
 233                    sk->sk_state == LLCP_BOUND ||
 234                    sk->sk_state == LLCP_LISTEN) {
 235                        err = -EINVAL;
 236                        break;
 237                }
 238
 239                if (get_user(opt, (u32 __user *) optval)) {
 240                        err = -EFAULT;
 241                        break;
 242                }
 243
 244                if (opt > LLCP_MAX_RW) {
 245                        err = -EINVAL;
 246                        break;
 247                }
 248
 249                llcp_sock->rw = (u8) opt;
 250
 251                break;
 252
 253        case NFC_LLCP_MIUX:
 254                if (sk->sk_state == LLCP_CONNECTED ||
 255                    sk->sk_state == LLCP_BOUND ||
 256                    sk->sk_state == LLCP_LISTEN) {
 257                        err = -EINVAL;
 258                        break;
 259                }
 260
 261                if (get_user(opt, (u32 __user *) optval)) {
 262                        err = -EFAULT;
 263                        break;
 264                }
 265
 266                if (opt > LLCP_MAX_MIUX) {
 267                        err = -EINVAL;
 268                        break;
 269                }
 270
 271                llcp_sock->miux = cpu_to_be16((u16) opt);
 272
 273                break;
 274
 275        default:
 276                err = -ENOPROTOOPT;
 277                break;
 278        }
 279
 280        release_sock(sk);
 281
 282        pr_debug("%p rw %d miux %d\n", llcp_sock,
 283                 llcp_sock->rw, llcp_sock->miux);
 284
 285        return err;
 286}
 287
 288static int nfc_llcp_getsockopt(struct socket *sock, int level, int optname,
 289                               char __user *optval, int __user *optlen)
 290{
 291        struct nfc_llcp_local *local;
 292        struct sock *sk = sock->sk;
 293        struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk);
 294        int len, err = 0;
 295        u16 miux, remote_miu;
 296        u8 rw;
 297
 298        pr_debug("%p optname %d\n", sk, optname);
 299
 300        if (level != SOL_NFC)
 301                return -ENOPROTOOPT;
 302
 303        if (get_user(len, optlen))
 304                return -EFAULT;
 305
 306        local = llcp_sock->local;
 307        if (!local)
 308                return -ENODEV;
 309
 310        len = min_t(u32, len, sizeof(u32));
 311
 312        lock_sock(sk);
 313
 314        switch (optname) {
 315        case NFC_LLCP_RW:
 316                rw = llcp_sock->rw > LLCP_MAX_RW ? local->rw : llcp_sock->rw;
 317                if (put_user(rw, (u32 __user *) optval))
 318                        err = -EFAULT;
 319
 320                break;
 321
 322        case NFC_LLCP_MIUX:
 323                miux = be16_to_cpu(llcp_sock->miux) > LLCP_MAX_MIUX ?
 324                        be16_to_cpu(local->miux) : be16_to_cpu(llcp_sock->miux);
 325
 326                if (put_user(miux, (u32 __user *) optval))
 327                        err = -EFAULT;
 328
 329                break;
 330
 331        case NFC_LLCP_REMOTE_MIU:
 332                remote_miu = llcp_sock->remote_miu > LLCP_MAX_MIU ?
 333                                local->remote_miu : llcp_sock->remote_miu;
 334
 335                if (put_user(remote_miu, (u32 __user *) optval))
 336                        err = -EFAULT;
 337
 338                break;
 339
 340        case NFC_LLCP_REMOTE_LTO:
 341                if (put_user(local->remote_lto / 10, (u32 __user *) optval))
 342                        err = -EFAULT;
 343
 344                break;
 345
 346        case NFC_LLCP_REMOTE_RW:
 347                if (put_user(llcp_sock->remote_rw, (u32 __user *) optval))
 348                        err = -EFAULT;
 349
 350                break;
 351
 352        default:
 353                err = -ENOPROTOOPT;
 354                break;
 355        }
 356
 357        release_sock(sk);
 358
 359        if (put_user(len, optlen))
 360                return -EFAULT;
 361
 362        return err;
 363}
 364
 365void nfc_llcp_accept_unlink(struct sock *sk)
 366{
 367        struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk);
 368
 369        pr_debug("state %d\n", sk->sk_state);
 370
 371        list_del_init(&llcp_sock->accept_queue);
 372        sk_acceptq_removed(llcp_sock->parent);
 373        llcp_sock->parent = NULL;
 374
 375        sock_put(sk);
 376}
 377
 378void nfc_llcp_accept_enqueue(struct sock *parent, struct sock *sk)
 379{
 380        struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk);
 381        struct nfc_llcp_sock *llcp_sock_parent = nfc_llcp_sock(parent);
 382
 383        /* Lock will be free from unlink */
 384        sock_hold(sk);
 385
 386        list_add_tail(&llcp_sock->accept_queue,
 387                      &llcp_sock_parent->accept_queue);
 388        llcp_sock->parent = parent;
 389        sk_acceptq_added(parent);
 390}
 391
 392struct sock *nfc_llcp_accept_dequeue(struct sock *parent,
 393                                     struct socket *newsock)
 394{
 395        struct nfc_llcp_sock *lsk, *n, *llcp_parent;
 396        struct sock *sk;
 397
 398        llcp_parent = nfc_llcp_sock(parent);
 399
 400        list_for_each_entry_safe(lsk, n, &llcp_parent->accept_queue,
 401                                 accept_queue) {
 402                sk = &lsk->sk;
 403                lock_sock(sk);
 404
 405                if (sk->sk_state == LLCP_CLOSED) {
 406                        release_sock(sk);
 407                        nfc_llcp_accept_unlink(sk);
 408                        continue;
 409                }
 410
 411                if (sk->sk_state == LLCP_CONNECTED || !newsock) {
 412                        list_del_init(&lsk->accept_queue);
 413                        sock_put(sk);
 414
 415                        if (newsock)
 416                                sock_graft(sk, newsock);
 417
 418                        release_sock(sk);
 419
 420                        pr_debug("Returning sk state %d\n", sk->sk_state);
 421
 422                        sk_acceptq_removed(parent);
 423
 424                        return sk;
 425                }
 426
 427                release_sock(sk);
 428        }
 429
 430        return NULL;
 431}
 432
 433static int llcp_sock_accept(struct socket *sock, struct socket *newsock,
 434                            int flags, bool kern)
 435{
 436        DECLARE_WAITQUEUE(wait, current);
 437        struct sock *sk = sock->sk, *new_sk;
 438        long timeo;
 439        int ret = 0;
 440
 441        pr_debug("parent %p\n", sk);
 442
 443        lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
 444
 445        if (sk->sk_state != LLCP_LISTEN) {
 446                ret = -EBADFD;
 447                goto error;
 448        }
 449
 450        timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
 451
 452        /* Wait for an incoming connection. */
 453        add_wait_queue_exclusive(sk_sleep(sk), &wait);
 454        while (!(new_sk = nfc_llcp_accept_dequeue(sk, newsock))) {
 455                set_current_state(TASK_INTERRUPTIBLE);
 456
 457                if (!timeo) {
 458                        ret = -EAGAIN;
 459                        break;
 460                }
 461
 462                if (signal_pending(current)) {
 463                        ret = sock_intr_errno(timeo);
 464                        break;
 465                }
 466
 467                release_sock(sk);
 468                timeo = schedule_timeout(timeo);
 469                lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
 470        }
 471        __set_current_state(TASK_RUNNING);
 472        remove_wait_queue(sk_sleep(sk), &wait);
 473
 474        if (ret)
 475                goto error;
 476
 477        newsock->state = SS_CONNECTED;
 478
 479        pr_debug("new socket %p\n", new_sk);
 480
 481error:
 482        release_sock(sk);
 483
 484        return ret;
 485}
 486
 487static int llcp_sock_getname(struct socket *sock, struct sockaddr *uaddr,
 488                             int peer)
 489{
 490        struct sock *sk = sock->sk;
 491        struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk);
 492        DECLARE_SOCKADDR(struct sockaddr_nfc_llcp *, llcp_addr, uaddr);
 493
 494        if (llcp_sock == NULL || llcp_sock->dev == NULL)
 495                return -EBADFD;
 496
 497        pr_debug("%p %d %d %d\n", sk, llcp_sock->target_idx,
 498                 llcp_sock->dsap, llcp_sock->ssap);
 499
 500        memset(llcp_addr, 0, sizeof(*llcp_addr));
 501
 502        lock_sock(sk);
 503        if (!llcp_sock->dev) {
 504                release_sock(sk);
 505                return -EBADFD;
 506        }
 507        llcp_addr->sa_family = AF_NFC;
 508        llcp_addr->dev_idx = llcp_sock->dev->idx;
 509        llcp_addr->target_idx = llcp_sock->target_idx;
 510        llcp_addr->nfc_protocol = llcp_sock->nfc_protocol;
 511        llcp_addr->dsap = llcp_sock->dsap;
 512        llcp_addr->ssap = llcp_sock->ssap;
 513        llcp_addr->service_name_len = llcp_sock->service_name_len;
 514        memcpy(llcp_addr->service_name, llcp_sock->service_name,
 515               llcp_addr->service_name_len);
 516        release_sock(sk);
 517
 518        return sizeof(struct sockaddr_nfc_llcp);
 519}
 520
 521static inline __poll_t llcp_accept_poll(struct sock *parent)
 522{
 523        struct nfc_llcp_sock *llcp_sock, *parent_sock;
 524        struct sock *sk;
 525
 526        parent_sock = nfc_llcp_sock(parent);
 527
 528        list_for_each_entry(llcp_sock, &parent_sock->accept_queue,
 529                            accept_queue) {
 530                sk = &llcp_sock->sk;
 531
 532                if (sk->sk_state == LLCP_CONNECTED)
 533                        return EPOLLIN | EPOLLRDNORM;
 534        }
 535
 536        return 0;
 537}
 538
 539static __poll_t llcp_sock_poll(struct file *file, struct socket *sock,
 540                                   poll_table *wait)
 541{
 542        struct sock *sk = sock->sk;
 543        __poll_t mask = 0;
 544
 545        pr_debug("%p\n", sk);
 546
 547        sock_poll_wait(file, sock, wait);
 548
 549        if (sk->sk_state == LLCP_LISTEN)
 550                return llcp_accept_poll(sk);
 551
 552        if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))
 553                mask |= EPOLLERR |
 554                        (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0);
 555
 556        if (!skb_queue_empty(&sk->sk_receive_queue))
 557                mask |= EPOLLIN | EPOLLRDNORM;
 558
 559        if (sk->sk_state == LLCP_CLOSED)
 560                mask |= EPOLLHUP;
 561
 562        if (sk->sk_shutdown & RCV_SHUTDOWN)
 563                mask |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM;
 564
 565        if (sk->sk_shutdown == SHUTDOWN_MASK)
 566                mask |= EPOLLHUP;
 567
 568        if (sock_writeable(sk) && sk->sk_state == LLCP_CONNECTED)
 569                mask |= EPOLLOUT | EPOLLWRNORM | EPOLLWRBAND;
 570        else
 571                sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk);
 572
 573        pr_debug("mask 0x%x\n", mask);
 574
 575        return mask;
 576}
 577
 578static int llcp_sock_release(struct socket *sock)
 579{
 580        struct sock *sk = sock->sk;
 581        struct nfc_llcp_local *local;
 582        struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk);
 583        int err = 0;
 584
 585        if (!sk)
 586                return 0;
 587
 588        pr_debug("%p\n", sk);
 589
 590        local = llcp_sock->local;
 591        if (local == NULL) {
 592                err = -ENODEV;
 593                goto out;
 594        }
 595
 596        lock_sock(sk);
 597
 598        /* Send a DISC */
 599        if (sk->sk_state == LLCP_CONNECTED)
 600                nfc_llcp_send_disconnect(llcp_sock);
 601
 602        if (sk->sk_state == LLCP_LISTEN) {
 603                struct nfc_llcp_sock *lsk, *n;
 604                struct sock *accept_sk;
 605
 606                list_for_each_entry_safe(lsk, n, &llcp_sock->accept_queue,
 607                                         accept_queue) {
 608                        accept_sk = &lsk->sk;
 609                        lock_sock(accept_sk);
 610
 611                        nfc_llcp_send_disconnect(lsk);
 612                        nfc_llcp_accept_unlink(accept_sk);
 613
 614                        release_sock(accept_sk);
 615                }
 616        }
 617
 618        if (llcp_sock->reserved_ssap < LLCP_SAP_MAX)
 619                nfc_llcp_put_ssap(llcp_sock->local, llcp_sock->ssap);
 620
 621        release_sock(sk);
 622
 623        /* Keep this sock alive and therefore do not remove it from the sockets
 624         * list until the DISC PDU has been actually sent. Otherwise we would
 625         * reply with DM PDUs before sending the DISC one.
 626         */
 627        if (sk->sk_state == LLCP_DISCONNECTING)
 628                return err;
 629
 630        if (sock->type == SOCK_RAW)
 631                nfc_llcp_sock_unlink(&local->raw_sockets, sk);
 632        else
 633                nfc_llcp_sock_unlink(&local->sockets, sk);
 634
 635out:
 636        sock_orphan(sk);
 637        sock_put(sk);
 638
 639        return err;
 640}
 641
 642static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr,
 643                             int len, int flags)
 644{
 645        struct sock *sk = sock->sk;
 646        struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk);
 647        struct sockaddr_nfc_llcp *addr = (struct sockaddr_nfc_llcp *)_addr;
 648        struct nfc_dev *dev;
 649        struct nfc_llcp_local *local;
 650        int ret = 0;
 651
 652        pr_debug("sock %p sk %p flags 0x%x\n", sock, sk, flags);
 653
 654        if (!addr || len < sizeof(*addr) || addr->sa_family != AF_NFC)
 655                return -EINVAL;
 656
 657        if (addr->service_name_len == 0 && addr->dsap == 0)
 658                return -EINVAL;
 659
 660        pr_debug("addr dev_idx=%u target_idx=%u protocol=%u\n", addr->dev_idx,
 661                 addr->target_idx, addr->nfc_protocol);
 662
 663        lock_sock(sk);
 664
 665        if (sk->sk_state == LLCP_CONNECTED) {
 666                ret = -EISCONN;
 667                goto error;
 668        }
 669
 670        dev = nfc_get_device(addr->dev_idx);
 671        if (dev == NULL) {
 672                ret = -ENODEV;
 673                goto error;
 674        }
 675
 676        local = nfc_llcp_find_local(dev);
 677        if (local == NULL) {
 678                ret = -ENODEV;
 679                goto put_dev;
 680        }
 681
 682        device_lock(&dev->dev);
 683        if (dev->dep_link_up == false) {
 684                ret = -ENOLINK;
 685                device_unlock(&dev->dev);
 686                goto put_dev;
 687        }
 688        device_unlock(&dev->dev);
 689
 690        if (local->rf_mode == NFC_RF_INITIATOR &&
 691            addr->target_idx != local->target_idx) {
 692                ret = -ENOLINK;
 693                goto put_dev;
 694        }
 695
 696        llcp_sock->dev = dev;
 697        llcp_sock->local = nfc_llcp_local_get(local);
 698        llcp_sock->ssap = nfc_llcp_get_local_ssap(local);
 699        if (llcp_sock->ssap == LLCP_SAP_MAX) {
 700                ret = -ENOMEM;
 701                goto put_dev;
 702        }
 703
 704        llcp_sock->reserved_ssap = llcp_sock->ssap;
 705
 706        if (addr->service_name_len == 0)
 707                llcp_sock->dsap = addr->dsap;
 708        else
 709                llcp_sock->dsap = LLCP_SAP_SDP;
 710        llcp_sock->nfc_protocol = addr->nfc_protocol;
 711        llcp_sock->service_name_len = min_t(unsigned int,
 712                                            addr->service_name_len,
 713                                            NFC_LLCP_MAX_SERVICE_NAME);
 714        llcp_sock->service_name = kmemdup(addr->service_name,
 715                                          llcp_sock->service_name_len,
 716                                          GFP_KERNEL);
 717        if (!llcp_sock->service_name) {
 718                ret = -ENOMEM;
 719                goto sock_llcp_release;
 720        }
 721
 722        nfc_llcp_sock_link(&local->connecting_sockets, sk);
 723
 724        ret = nfc_llcp_send_connect(llcp_sock);
 725        if (ret)
 726                goto sock_unlink;
 727
 728        sk->sk_state = LLCP_CONNECTING;
 729
 730        ret = sock_wait_state(sk, LLCP_CONNECTED,
 731                              sock_sndtimeo(sk, flags & O_NONBLOCK));
 732        if (ret && ret != -EINPROGRESS)
 733                goto sock_unlink;
 734
 735        release_sock(sk);
 736
 737        return ret;
 738
 739sock_unlink:
 740        nfc_llcp_sock_unlink(&local->connecting_sockets, sk);
 741
 742sock_llcp_release:
 743        nfc_llcp_put_ssap(local, llcp_sock->ssap);
 744
 745put_dev:
 746        nfc_put_device(dev);
 747
 748error:
 749        release_sock(sk);
 750        return ret;
 751}
 752
 753static int llcp_sock_sendmsg(struct socket *sock, struct msghdr *msg,
 754                             size_t len)
 755{
 756        struct sock *sk = sock->sk;
 757        struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk);
 758        int ret;
 759
 760        pr_debug("sock %p sk %p", sock, sk);
 761
 762        ret = sock_error(sk);
 763        if (ret)
 764                return ret;
 765
 766        if (msg->msg_flags & MSG_OOB)
 767                return -EOPNOTSUPP;
 768
 769        lock_sock(sk);
 770
 771        if (sk->sk_type == SOCK_DGRAM) {
 772                DECLARE_SOCKADDR(struct sockaddr_nfc_llcp *, addr,
 773                                 msg->msg_name);
 774
 775                if (msg->msg_namelen < sizeof(*addr)) {
 776                        release_sock(sk);
 777                        return -EINVAL;
 778                }
 779
 780                release_sock(sk);
 781
 782                return nfc_llcp_send_ui_frame(llcp_sock, addr->dsap, addr->ssap,
 783                                              msg, len);
 784        }
 785
 786        if (sk->sk_state != LLCP_CONNECTED) {
 787                release_sock(sk);
 788                return -ENOTCONN;
 789        }
 790
 791        release_sock(sk);
 792
 793        return nfc_llcp_send_i_frame(llcp_sock, msg, len);
 794}
 795
 796static int llcp_sock_recvmsg(struct socket *sock, struct msghdr *msg,
 797                             size_t len, int flags)
 798{
 799        int noblock = flags & MSG_DONTWAIT;
 800        struct sock *sk = sock->sk;
 801        unsigned int copied, rlen;
 802        struct sk_buff *skb, *cskb;
 803        int err = 0;
 804
 805        pr_debug("%p %zu\n", sk, len);
 806
 807        lock_sock(sk);
 808
 809        if (sk->sk_state == LLCP_CLOSED &&
 810            skb_queue_empty(&sk->sk_receive_queue)) {
 811                release_sock(sk);
 812                return 0;
 813        }
 814
 815        release_sock(sk);
 816
 817        if (flags & (MSG_OOB))
 818                return -EOPNOTSUPP;
 819
 820        skb = skb_recv_datagram(sk, flags, noblock, &err);
 821        if (!skb) {
 822                pr_err("Recv datagram failed state %d %d %d",
 823                       sk->sk_state, err, sock_error(sk));
 824
 825                if (sk->sk_shutdown & RCV_SHUTDOWN)
 826                        return 0;
 827
 828                return err;
 829        }
 830
 831        rlen = skb->len;                /* real length of skb */
 832        copied = min_t(unsigned int, rlen, len);
 833
 834        cskb = skb;
 835        if (skb_copy_datagram_msg(cskb, 0, msg, copied)) {
 836                if (!(flags & MSG_PEEK))
 837                        skb_queue_head(&sk->sk_receive_queue, skb);
 838                return -EFAULT;
 839        }
 840
 841        sock_recv_timestamp(msg, sk, skb);
 842
 843        if (sk->sk_type == SOCK_DGRAM && msg->msg_name) {
 844                struct nfc_llcp_ui_cb *ui_cb = nfc_llcp_ui_skb_cb(skb);
 845                DECLARE_SOCKADDR(struct sockaddr_nfc_llcp *, sockaddr,
 846                                 msg->msg_name);
 847
 848                msg->msg_namelen = sizeof(struct sockaddr_nfc_llcp);
 849
 850                pr_debug("Datagram socket %d %d\n", ui_cb->dsap, ui_cb->ssap);
 851
 852                memset(sockaddr, 0, sizeof(*sockaddr));
 853                sockaddr->sa_family = AF_NFC;
 854                sockaddr->nfc_protocol = NFC_PROTO_NFC_DEP;
 855                sockaddr->dsap = ui_cb->dsap;
 856                sockaddr->ssap = ui_cb->ssap;
 857        }
 858
 859        /* Mark read part of skb as used */
 860        if (!(flags & MSG_PEEK)) {
 861
 862                /* SOCK_STREAM: re-queue skb if it contains unreceived data */
 863                if (sk->sk_type == SOCK_STREAM ||
 864                    sk->sk_type == SOCK_DGRAM ||
 865                    sk->sk_type == SOCK_RAW) {
 866                        skb_pull(skb, copied);
 867                        if (skb->len) {
 868                                skb_queue_head(&sk->sk_receive_queue, skb);
 869                                goto done;
 870                        }
 871                }
 872
 873                kfree_skb(skb);
 874        }
 875
 876        /* XXX Queue backlogged skbs */
 877
 878done:
 879        /* SOCK_SEQPACKET: return real length if MSG_TRUNC is set */
 880        if (sk->sk_type == SOCK_SEQPACKET && (flags & MSG_TRUNC))
 881                copied = rlen;
 882
 883        return copied;
 884}
 885
 886static const struct proto_ops llcp_sock_ops = {
 887        .family         = PF_NFC,
 888        .owner          = THIS_MODULE,
 889        .bind           = llcp_sock_bind,
 890        .connect        = llcp_sock_connect,
 891        .release        = llcp_sock_release,
 892        .socketpair     = sock_no_socketpair,
 893        .accept         = llcp_sock_accept,
 894        .getname        = llcp_sock_getname,
 895        .poll           = llcp_sock_poll,
 896        .ioctl          = sock_no_ioctl,
 897        .listen         = llcp_sock_listen,
 898        .shutdown       = sock_no_shutdown,
 899        .setsockopt     = nfc_llcp_setsockopt,
 900        .getsockopt     = nfc_llcp_getsockopt,
 901        .sendmsg        = llcp_sock_sendmsg,
 902        .recvmsg        = llcp_sock_recvmsg,
 903        .mmap           = sock_no_mmap,
 904};
 905
 906static const struct proto_ops llcp_rawsock_ops = {
 907        .family         = PF_NFC,
 908        .owner          = THIS_MODULE,
 909        .bind           = llcp_raw_sock_bind,
 910        .connect        = sock_no_connect,
 911        .release        = llcp_sock_release,
 912        .socketpair     = sock_no_socketpair,
 913        .accept         = sock_no_accept,
 914        .getname        = llcp_sock_getname,
 915        .poll           = llcp_sock_poll,
 916        .ioctl          = sock_no_ioctl,
 917        .listen         = sock_no_listen,
 918        .shutdown       = sock_no_shutdown,
 919        .setsockopt     = sock_no_setsockopt,
 920        .getsockopt     = sock_no_getsockopt,
 921        .sendmsg        = sock_no_sendmsg,
 922        .recvmsg        = llcp_sock_recvmsg,
 923        .mmap           = sock_no_mmap,
 924};
 925
 926static void llcp_sock_destruct(struct sock *sk)
 927{
 928        struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk);
 929
 930        pr_debug("%p\n", sk);
 931
 932        if (sk->sk_state == LLCP_CONNECTED)
 933                nfc_put_device(llcp_sock->dev);
 934
 935        skb_queue_purge(&sk->sk_receive_queue);
 936
 937        nfc_llcp_sock_free(llcp_sock);
 938
 939        if (!sock_flag(sk, SOCK_DEAD)) {
 940                pr_err("Freeing alive NFC LLCP socket %p\n", sk);
 941                return;
 942        }
 943}
 944
 945struct sock *nfc_llcp_sock_alloc(struct socket *sock, int type, gfp_t gfp, int kern)
 946{
 947        struct sock *sk;
 948        struct nfc_llcp_sock *llcp_sock;
 949
 950        sk = sk_alloc(&init_net, PF_NFC, gfp, &llcp_sock_proto, kern);
 951        if (!sk)
 952                return NULL;
 953
 954        llcp_sock = nfc_llcp_sock(sk);
 955
 956        sock_init_data(sock, sk);
 957        sk->sk_state = LLCP_CLOSED;
 958        sk->sk_protocol = NFC_SOCKPROTO_LLCP;
 959        sk->sk_type = type;
 960        sk->sk_destruct = llcp_sock_destruct;
 961
 962        llcp_sock->ssap = 0;
 963        llcp_sock->dsap = LLCP_SAP_SDP;
 964        llcp_sock->rw = LLCP_MAX_RW + 1;
 965        llcp_sock->miux = cpu_to_be16(LLCP_MAX_MIUX + 1);
 966        llcp_sock->send_n = llcp_sock->send_ack_n = 0;
 967        llcp_sock->recv_n = llcp_sock->recv_ack_n = 0;
 968        llcp_sock->remote_ready = 1;
 969        llcp_sock->reserved_ssap = LLCP_SAP_MAX;
 970        nfc_llcp_socket_remote_param_init(llcp_sock);
 971        skb_queue_head_init(&llcp_sock->tx_queue);
 972        skb_queue_head_init(&llcp_sock->tx_pending_queue);
 973        INIT_LIST_HEAD(&llcp_sock->accept_queue);
 974
 975        if (sock != NULL)
 976                sock->state = SS_UNCONNECTED;
 977
 978        return sk;
 979}
 980
 981void nfc_llcp_sock_free(struct nfc_llcp_sock *sock)
 982{
 983        kfree(sock->service_name);
 984
 985        skb_queue_purge(&sock->tx_queue);
 986        skb_queue_purge(&sock->tx_pending_queue);
 987
 988        list_del_init(&sock->accept_queue);
 989
 990        sock->parent = NULL;
 991
 992        nfc_llcp_local_put(sock->local);
 993}
 994
 995static int llcp_sock_create(struct net *net, struct socket *sock,
 996                            const struct nfc_protocol *nfc_proto, int kern)
 997{
 998        struct sock *sk;
 999
1000        pr_debug("%p\n", sock);
1001
1002        if (sock->type != SOCK_STREAM &&
1003            sock->type != SOCK_DGRAM &&
1004            sock->type != SOCK_RAW)
1005                return -ESOCKTNOSUPPORT;
1006
1007        if (sock->type == SOCK_RAW)
1008                sock->ops = &llcp_rawsock_ops;
1009        else
1010                sock->ops = &llcp_sock_ops;
1011
1012        sk = nfc_llcp_sock_alloc(sock, sock->type, GFP_ATOMIC, kern);
1013        if (sk == NULL)
1014                return -ENOMEM;
1015
1016        return 0;
1017}
1018
1019static const struct nfc_protocol llcp_nfc_proto = {
1020        .id       = NFC_SOCKPROTO_LLCP,
1021        .proto    = &llcp_sock_proto,
1022        .owner    = THIS_MODULE,
1023        .create   = llcp_sock_create
1024};
1025
1026int __init nfc_llcp_sock_init(void)
1027{
1028        return nfc_proto_register(&llcp_nfc_proto);
1029}
1030
1031void nfc_llcp_sock_exit(void)
1032{
1033        nfc_proto_unregister(&llcp_nfc_proto);
1034}
1035