linux/net/l2tp/l2tp_ppp.c
<<
>>
Prefs
   1/*****************************************************************************
   2 * Linux PPP over L2TP (PPPoX/PPPoL2TP) Sockets
   3 *
   4 * PPPoX    --- Generic PPP encapsulation socket family
   5 * PPPoL2TP --- PPP over L2TP (RFC 2661)
   6 *
   7 * Version:     2.0.0
   8 *
   9 * Authors:     James Chapman (jchapman@katalix.com)
  10 *
  11 * Based on original work by Martijn van Oosterhout <kleptog@svana.org>
  12 *
  13 * License:
  14 *              This program is free software; you can redistribute it and/or
  15 *              modify it under the terms of the GNU General Public License
  16 *              as published by the Free Software Foundation; either version
  17 *              2 of the License, or (at your option) any later version.
  18 *
  19 */
  20
  21/* This driver handles only L2TP data frames; control frames are handled by a
  22 * userspace application.
  23 *
  24 * To send data in an L2TP session, userspace opens a PPPoL2TP socket and
  25 * attaches it to a bound UDP socket with local tunnel_id / session_id and
  26 * peer tunnel_id / session_id set. Data can then be sent or received using
  27 * regular socket sendmsg() / recvmsg() calls. Kernel parameters of the socket
  28 * can be read or modified using ioctl() or [gs]etsockopt() calls.
  29 *
  30 * When a PPPoL2TP socket is connected with local and peer session_id values
  31 * zero, the socket is treated as a special tunnel management socket.
  32 *
  33 * Here's example userspace code to create a socket for sending/receiving data
  34 * over an L2TP session:-
  35 *
  36 *      struct sockaddr_pppol2tp sax;
  37 *      int fd;
  38 *      int session_fd;
  39 *
  40 *      fd = socket(AF_PPPOX, SOCK_DGRAM, PX_PROTO_OL2TP);
  41 *
  42 *      sax.sa_family = AF_PPPOX;
  43 *      sax.sa_protocol = PX_PROTO_OL2TP;
  44 *      sax.pppol2tp.fd = tunnel_fd;    // bound UDP socket
  45 *      sax.pppol2tp.addr.sin_addr.s_addr = addr->sin_addr.s_addr;
  46 *      sax.pppol2tp.addr.sin_port = addr->sin_port;
  47 *      sax.pppol2tp.addr.sin_family = AF_INET;
  48 *      sax.pppol2tp.s_tunnel  = tunnel_id;
  49 *      sax.pppol2tp.s_session = session_id;
  50 *      sax.pppol2tp.d_tunnel  = peer_tunnel_id;
  51 *      sax.pppol2tp.d_session = peer_session_id;
  52 *
  53 *      session_fd = connect(fd, (struct sockaddr *)&sax, sizeof(sax));
  54 *
  55 * A pppd plugin that allows PPP traffic to be carried over L2TP using
  56 * this driver is available from the OpenL2TP project at
  57 * http://openl2tp.sourceforge.net.
  58 */
  59
  60#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  61
  62#include <linux/module.h>
  63#include <linux/string.h>
  64#include <linux/list.h>
  65#include <linux/uaccess.h>
  66
  67#include <linux/kernel.h>
  68#include <linux/spinlock.h>
  69#include <linux/kthread.h>
  70#include <linux/sched.h>
  71#include <linux/slab.h>
  72#include <linux/errno.h>
  73#include <linux/jiffies.h>
  74
  75#include <linux/netdevice.h>
  76#include <linux/net.h>
  77#include <linux/inetdevice.h>
  78#include <linux/skbuff.h>
  79#include <linux/init.h>
  80#include <linux/ip.h>
  81#include <linux/udp.h>
  82#include <linux/if_pppox.h>
  83#include <linux/if_pppol2tp.h>
  84#include <net/sock.h>
  85#include <linux/ppp_channel.h>
  86#include <linux/ppp_defs.h>
  87#include <linux/ppp-ioctl.h>
  88#include <linux/file.h>
  89#include <linux/hash.h>
  90#include <linux/sort.h>
  91#include <linux/proc_fs.h>
  92#include <linux/l2tp.h>
  93#include <linux/nsproxy.h>
  94#include <net/net_namespace.h>
  95#include <net/netns/generic.h>
  96#include <net/dst.h>
  97#include <net/ip.h>
  98#include <net/udp.h>
  99#include <net/xfrm.h>
 100#include <net/inet_common.h>
 101
 102#include <asm/byteorder.h>
 103#include <linux/atomic.h>
 104
 105#include "l2tp_core.h"
 106
 107#define PPPOL2TP_DRV_VERSION    "V2.0"
 108
 109/* Space for UDP, L2TP and PPP headers */
 110#define PPPOL2TP_HEADER_OVERHEAD        40
 111
 112/* Number of bytes to build transmit L2TP headers.
 113 * Unfortunately the size is different depending on whether sequence numbers
 114 * are enabled.
 115 */
 116#define PPPOL2TP_L2TP_HDR_SIZE_SEQ              10
 117#define PPPOL2TP_L2TP_HDR_SIZE_NOSEQ            6
 118
 119/* Private data of each session. This data lives at the end of struct
 120 * l2tp_session, referenced via session->priv[].
 121 */
 122struct pppol2tp_session {
 123        int                     owner;          /* pid that opened the socket */
 124
 125        struct mutex            sk_lock;        /* Protects .sk */
 126        struct sock __rcu       *sk;            /* Pointer to the session
 127                                                 * PPPoX socket */
 128        struct sock             *__sk;          /* Copy of .sk, for cleanup */
 129        struct rcu_head         rcu;            /* For asynchronous release */
 130        int                     flags;          /* accessed by PPPIOCGFLAGS.
 131                                                 * Unused. */
 132};
 133
 134static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb);
 135
 136static const struct ppp_channel_ops pppol2tp_chan_ops = {
 137        .start_xmit =  pppol2tp_xmit,
 138};
 139
 140static const struct proto_ops pppol2tp_ops;
 141
 142/* Retrieves the pppol2tp socket associated to a session.
 143 * A reference is held on the returned socket, so this function must be paired
 144 * with sock_put().
 145 */
 146static struct sock *pppol2tp_session_get_sock(struct l2tp_session *session)
 147{
 148        struct pppol2tp_session *ps = l2tp_session_priv(session);
 149        struct sock *sk;
 150
 151        rcu_read_lock();
 152        sk = rcu_dereference(ps->sk);
 153        if (sk)
 154                sock_hold(sk);
 155        rcu_read_unlock();
 156
 157        return sk;
 158}
 159
 160/* Helpers to obtain tunnel/session contexts from sockets.
 161 */
 162static inline struct l2tp_session *pppol2tp_sock_to_session(struct sock *sk)
 163{
 164        struct l2tp_session *session;
 165
 166        if (sk == NULL)
 167                return NULL;
 168
 169        sock_hold(sk);
 170        session = (struct l2tp_session *)(sk->sk_user_data);
 171        if (session == NULL) {
 172                sock_put(sk);
 173                goto out;
 174        }
 175
 176        BUG_ON(session->magic != L2TP_SESSION_MAGIC);
 177
 178out:
 179        return session;
 180}
 181
 182/*****************************************************************************
 183 * Receive data handling
 184 *****************************************************************************/
 185
 186static int pppol2tp_recv_payload_hook(struct sk_buff *skb)
 187{
 188        /* Skip PPP header, if present.  In testing, Microsoft L2TP clients
 189         * don't send the PPP header (PPP header compression enabled), but
 190         * other clients can include the header. So we cope with both cases
 191         * here. The PPP header is always FF03 when using L2TP.
 192         *
 193         * Note that skb->data[] isn't dereferenced from a u16 ptr here since
 194         * the field may be unaligned.
 195         */
 196        if (!pskb_may_pull(skb, 2))
 197                return 1;
 198
 199        if ((skb->data[0] == PPP_ALLSTATIONS) && (skb->data[1] == PPP_UI))
 200                skb_pull(skb, 2);
 201
 202        return 0;
 203}
 204
 205/* Receive message. This is the recvmsg for the PPPoL2TP socket.
 206 */
 207static int pppol2tp_recvmsg(struct socket *sock, struct msghdr *msg,
 208                            size_t len, int flags)
 209{
 210        int err;
 211        struct sk_buff *skb;
 212        struct sock *sk = sock->sk;
 213
 214        err = -EIO;
 215        if (sk->sk_state & PPPOX_BOUND)
 216                goto end;
 217
 218        err = 0;
 219        skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
 220                                flags & MSG_DONTWAIT, &err);
 221        if (!skb)
 222                goto end;
 223
 224        if (len > skb->len)
 225                len = skb->len;
 226        else if (len < skb->len)
 227                msg->msg_flags |= MSG_TRUNC;
 228
 229        err = skb_copy_datagram_msg(skb, 0, msg, len);
 230        if (likely(err == 0))
 231                err = len;
 232
 233        kfree_skb(skb);
 234end:
 235        return err;
 236}
 237
 238static void pppol2tp_recv(struct l2tp_session *session, struct sk_buff *skb, int data_len)
 239{
 240        struct pppol2tp_session *ps = l2tp_session_priv(session);
 241        struct sock *sk = NULL;
 242
 243        /* If the socket is bound, send it in to PPP's input queue. Otherwise
 244         * queue it on the session socket.
 245         */
 246        rcu_read_lock();
 247        sk = rcu_dereference(ps->sk);
 248        if (sk == NULL)
 249                goto no_sock;
 250
 251        if (sk->sk_state & PPPOX_BOUND) {
 252                struct pppox_sock *po;
 253
 254                l2tp_dbg(session, L2TP_MSG_DATA,
 255                         "%s: recv %d byte data frame, passing to ppp\n",
 256                         session->name, data_len);
 257
 258                po = pppox_sk(sk);
 259                ppp_input(&po->chan, skb);
 260        } else {
 261                l2tp_dbg(session, L2TP_MSG_DATA,
 262                         "%s: recv %d byte data frame, passing to L2TP socket\n",
 263                         session->name, data_len);
 264
 265                if (sock_queue_rcv_skb(sk, skb) < 0) {
 266                        atomic_long_inc(&session->stats.rx_errors);
 267                        kfree_skb(skb);
 268                }
 269        }
 270        rcu_read_unlock();
 271
 272        return;
 273
 274no_sock:
 275        rcu_read_unlock();
 276        l2tp_info(session, L2TP_MSG_DATA, "%s: no socket\n", session->name);
 277        kfree_skb(skb);
 278}
 279
 280/************************************************************************
 281 * Transmit handling
 282 ***********************************************************************/
 283
 284/* This is the sendmsg for the PPPoL2TP pppol2tp_session socket.  We come here
 285 * when a user application does a sendmsg() on the session socket. L2TP and
 286 * PPP headers must be inserted into the user's data.
 287 */
 288static int pppol2tp_sendmsg(struct socket *sock, struct msghdr *m,
 289                            size_t total_len)
 290{
 291        struct sock *sk = sock->sk;
 292        struct sk_buff *skb;
 293        int error;
 294        struct l2tp_session *session;
 295        struct l2tp_tunnel *tunnel;
 296        int uhlen;
 297
 298        error = -ENOTCONN;
 299        if (sock_flag(sk, SOCK_DEAD) || !(sk->sk_state & PPPOX_CONNECTED))
 300                goto error;
 301
 302        /* Get session and tunnel contexts */
 303        error = -EBADF;
 304        session = pppol2tp_sock_to_session(sk);
 305        if (session == NULL)
 306                goto error;
 307
 308        tunnel = session->tunnel;
 309
 310        uhlen = (tunnel->encap == L2TP_ENCAPTYPE_UDP) ? sizeof(struct udphdr) : 0;
 311
 312        /* Allocate a socket buffer */
 313        error = -ENOMEM;
 314        skb = sock_wmalloc(sk, NET_SKB_PAD + sizeof(struct iphdr) +
 315                           uhlen + session->hdr_len +
 316                           2 + total_len, /* 2 bytes for PPP_ALLSTATIONS & PPP_UI */
 317                           0, GFP_KERNEL);
 318        if (!skb)
 319                goto error_put_sess;
 320
 321        /* Reserve space for headers. */
 322        skb_reserve(skb, NET_SKB_PAD);
 323        skb_reset_network_header(skb);
 324        skb_reserve(skb, sizeof(struct iphdr));
 325        skb_reset_transport_header(skb);
 326        skb_reserve(skb, uhlen);
 327
 328        /* Add PPP header */
 329        skb->data[0] = PPP_ALLSTATIONS;
 330        skb->data[1] = PPP_UI;
 331        skb_put(skb, 2);
 332
 333        /* Copy user data into skb */
 334        error = memcpy_from_msg(skb_put(skb, total_len), m, total_len);
 335        if (error < 0) {
 336                kfree_skb(skb);
 337                goto error_put_sess;
 338        }
 339
 340        local_bh_disable();
 341        l2tp_xmit_skb(session, skb, session->hdr_len);
 342        local_bh_enable();
 343
 344        sock_put(sk);
 345
 346        return total_len;
 347
 348error_put_sess:
 349        sock_put(sk);
 350error:
 351        return error;
 352}
 353
 354/* Transmit function called by generic PPP driver.  Sends PPP frame
 355 * over PPPoL2TP socket.
 356 *
 357 * This is almost the same as pppol2tp_sendmsg(), but rather than
 358 * being called with a msghdr from userspace, it is called with a skb
 359 * from the kernel.
 360 *
 361 * The supplied skb from ppp doesn't have enough headroom for the
 362 * insertion of L2TP, UDP and IP headers so we need to allocate more
 363 * headroom in the skb. This will create a cloned skb. But we must be
 364 * careful in the error case because the caller will expect to free
 365 * the skb it supplied, not our cloned skb. So we take care to always
 366 * leave the original skb unfreed if we return an error.
 367 */
 368static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
 369{
 370        struct sock *sk = (struct sock *) chan->private;
 371        struct l2tp_session *session;
 372        struct l2tp_tunnel *tunnel;
 373        int uhlen, headroom;
 374
 375        if (sock_flag(sk, SOCK_DEAD) || !(sk->sk_state & PPPOX_CONNECTED))
 376                goto abort;
 377
 378        /* Get session and tunnel contexts from the socket */
 379        session = pppol2tp_sock_to_session(sk);
 380        if (session == NULL)
 381                goto abort;
 382
 383        tunnel = session->tunnel;
 384
 385        uhlen = (tunnel->encap == L2TP_ENCAPTYPE_UDP) ? sizeof(struct udphdr) : 0;
 386        headroom = NET_SKB_PAD +
 387                   sizeof(struct iphdr) + /* IP header */
 388                   uhlen +              /* UDP header (if L2TP_ENCAPTYPE_UDP) */
 389                   session->hdr_len +   /* L2TP header */
 390                   2;                   /* 2 bytes for PPP_ALLSTATIONS & PPP_UI */
 391        if (skb_cow_head(skb, headroom))
 392                goto abort_put_sess;
 393
 394        /* Setup PPP header */
 395        __skb_push(skb, 2);
 396        skb->data[0] = PPP_ALLSTATIONS;
 397        skb->data[1] = PPP_UI;
 398
 399        local_bh_disable();
 400        l2tp_xmit_skb(session, skb, session->hdr_len);
 401        local_bh_enable();
 402
 403        sock_put(sk);
 404
 405        return 1;
 406
 407abort_put_sess:
 408        sock_put(sk);
 409abort:
 410        /* Free the original skb */
 411        kfree_skb(skb);
 412        return 1;
 413}
 414
 415/*****************************************************************************
 416 * Session (and tunnel control) socket create/destroy.
 417 *****************************************************************************/
 418
 419static void pppol2tp_put_sk(struct rcu_head *head)
 420{
 421        struct pppol2tp_session *ps;
 422
 423        ps = container_of(head, typeof(*ps), rcu);
 424        sock_put(ps->__sk);
 425}
 426
 427/* Called by l2tp_core when a session socket is being closed.
 428 */
 429static void pppol2tp_session_close(struct l2tp_session *session)
 430{
 431        struct pppol2tp_session *ps;
 432
 433        ps = l2tp_session_priv(session);
 434        mutex_lock(&ps->sk_lock);
 435        ps->__sk = rcu_dereference_protected(ps->sk,
 436                                             lockdep_is_held(&ps->sk_lock));
 437        RCU_INIT_POINTER(ps->sk, NULL);
 438        if (ps->__sk)
 439                call_rcu(&ps->rcu, pppol2tp_put_sk);
 440        mutex_unlock(&ps->sk_lock);
 441}
 442
 443/* Really kill the session socket. (Called from sock_put() if
 444 * refcnt == 0.)
 445 */
 446static void pppol2tp_session_destruct(struct sock *sk)
 447{
 448        struct l2tp_session *session = sk->sk_user_data;
 449
 450        skb_queue_purge(&sk->sk_receive_queue);
 451        skb_queue_purge(&sk->sk_write_queue);
 452
 453        if (session) {
 454                sk->sk_user_data = NULL;
 455                BUG_ON(session->magic != L2TP_SESSION_MAGIC);
 456                l2tp_session_dec_refcount(session);
 457        }
 458}
 459
 460/* Called when the PPPoX socket (session) is closed.
 461 */
 462static int pppol2tp_release(struct socket *sock)
 463{
 464        struct sock *sk = sock->sk;
 465        struct l2tp_session *session;
 466        int error;
 467
 468        if (!sk)
 469                return 0;
 470
 471        error = -EBADF;
 472        lock_sock(sk);
 473        if (sock_flag(sk, SOCK_DEAD) != 0)
 474                goto error;
 475
 476        pppox_unbind_sock(sk);
 477
 478        /* Signal the death of the socket. */
 479        sk->sk_state = PPPOX_DEAD;
 480        sock_orphan(sk);
 481        sock->sk = NULL;
 482
 483        /* If the socket is associated with a session,
 484         * l2tp_session_delete will call pppol2tp_session_close which
 485         * will drop the session's ref on the socket.
 486         */
 487        session = pppol2tp_sock_to_session(sk);
 488        if (session) {
 489                l2tp_session_delete(session);
 490                /* drop the ref obtained by pppol2tp_sock_to_session */
 491                sock_put(sk);
 492        }
 493
 494        release_sock(sk);
 495
 496        /* This will delete the session context via
 497         * pppol2tp_session_destruct() if the socket's refcnt drops to
 498         * zero.
 499         */
 500        sock_put(sk);
 501
 502        return 0;
 503
 504error:
 505        release_sock(sk);
 506        return error;
 507}
 508
 509static struct proto pppol2tp_sk_proto = {
 510        .name     = "PPPOL2TP",
 511        .owner    = THIS_MODULE,
 512        .obj_size = sizeof(struct pppox_sock),
 513};
 514
 515static int pppol2tp_backlog_recv(struct sock *sk, struct sk_buff *skb)
 516{
 517        int rc;
 518
 519        rc = l2tp_udp_encap_recv(sk, skb);
 520        if (rc)
 521                kfree_skb(skb);
 522
 523        return NET_RX_SUCCESS;
 524}
 525
 526/* socket() handler. Initialize a new struct sock.
 527 */
 528static int pppol2tp_create(struct net *net, struct socket *sock, int kern)
 529{
 530        int error = -ENOMEM;
 531        struct sock *sk;
 532
 533        sk = sk_alloc(net, PF_PPPOX, GFP_KERNEL, &pppol2tp_sk_proto, kern);
 534        if (!sk)
 535                goto out;
 536
 537        sock_init_data(sock, sk);
 538
 539        sock->state  = SS_UNCONNECTED;
 540        sock->ops    = &pppol2tp_ops;
 541
 542        sk->sk_backlog_rcv = pppol2tp_backlog_recv;
 543        sk->sk_protocol    = PX_PROTO_OL2TP;
 544        sk->sk_family      = PF_PPPOX;
 545        sk->sk_state       = PPPOX_NONE;
 546        sk->sk_type        = SOCK_STREAM;
 547        sk->sk_destruct    = pppol2tp_session_destruct;
 548
 549        error = 0;
 550
 551out:
 552        return error;
 553}
 554
 555#if IS_ENABLED(CONFIG_L2TP_DEBUGFS)
 556static void pppol2tp_show(struct seq_file *m, void *arg)
 557{
 558        struct l2tp_session *session = arg;
 559        struct sock *sk;
 560
 561        sk = pppol2tp_session_get_sock(session);
 562        if (sk) {
 563                struct pppox_sock *po = pppox_sk(sk);
 564
 565                seq_printf(m, "   interface %s\n", ppp_dev_name(&po->chan));
 566                sock_put(sk);
 567        }
 568}
 569#endif
 570
 571static void pppol2tp_session_init(struct l2tp_session *session)
 572{
 573        struct pppol2tp_session *ps;
 574        struct dst_entry *dst;
 575
 576        session->recv_skb = pppol2tp_recv;
 577        session->session_close = pppol2tp_session_close;
 578#if IS_ENABLED(CONFIG_L2TP_DEBUGFS)
 579        session->show = pppol2tp_show;
 580#endif
 581
 582        ps = l2tp_session_priv(session);
 583        mutex_init(&ps->sk_lock);
 584        ps->owner = current->pid;
 585
 586        /* If PMTU discovery was enabled, use the MTU that was discovered */
 587        dst = sk_dst_get(session->tunnel->sock);
 588        if (dst) {
 589                u32 pmtu = dst_mtu(dst);
 590
 591                if (pmtu) {
 592                        session->mtu = pmtu - PPPOL2TP_HEADER_OVERHEAD;
 593                        session->mru = pmtu - PPPOL2TP_HEADER_OVERHEAD;
 594                }
 595                dst_release(dst);
 596        }
 597}
 598
 599/* connect() handler. Attach a PPPoX socket to a tunnel UDP socket
 600 */
 601static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr,
 602                            int sockaddr_len, int flags)
 603{
 604        struct sock *sk = sock->sk;
 605        struct sockaddr_pppol2tp *sp = (struct sockaddr_pppol2tp *) uservaddr;
 606        struct pppox_sock *po = pppox_sk(sk);
 607        struct l2tp_session *session = NULL;
 608        struct l2tp_tunnel *tunnel;
 609        struct pppol2tp_session *ps;
 610        struct l2tp_session_cfg cfg = { 0, };
 611        int error = 0;
 612        u32 tunnel_id, peer_tunnel_id;
 613        u32 session_id, peer_session_id;
 614        bool drop_refcnt = false;
 615        bool drop_tunnel = false;
 616        int ver = 2;
 617        int fd;
 618
 619        lock_sock(sk);
 620
 621        error = -EINVAL;
 622        if (sp->sa_protocol != PX_PROTO_OL2TP)
 623                goto end;
 624
 625        /* Check for already bound sockets */
 626        error = -EBUSY;
 627        if (sk->sk_state & PPPOX_CONNECTED)
 628                goto end;
 629
 630        /* We don't supporting rebinding anyway */
 631        error = -EALREADY;
 632        if (sk->sk_user_data)
 633                goto end; /* socket is already attached */
 634
 635        /* Get params from socket address. Handle L2TPv2 and L2TPv3.
 636         * This is nasty because there are different sockaddr_pppol2tp
 637         * structs for L2TPv2, L2TPv3, over IPv4 and IPv6. We use
 638         * the sockaddr size to determine which structure the caller
 639         * is using.
 640         */
 641        peer_tunnel_id = 0;
 642        if (sockaddr_len == sizeof(struct sockaddr_pppol2tp)) {
 643                fd = sp->pppol2tp.fd;
 644                tunnel_id = sp->pppol2tp.s_tunnel;
 645                peer_tunnel_id = sp->pppol2tp.d_tunnel;
 646                session_id = sp->pppol2tp.s_session;
 647                peer_session_id = sp->pppol2tp.d_session;
 648        } else if (sockaddr_len == sizeof(struct sockaddr_pppol2tpv3)) {
 649                struct sockaddr_pppol2tpv3 *sp3 =
 650                        (struct sockaddr_pppol2tpv3 *) sp;
 651                ver = 3;
 652                fd = sp3->pppol2tp.fd;
 653                tunnel_id = sp3->pppol2tp.s_tunnel;
 654                peer_tunnel_id = sp3->pppol2tp.d_tunnel;
 655                session_id = sp3->pppol2tp.s_session;
 656                peer_session_id = sp3->pppol2tp.d_session;
 657        } else if (sockaddr_len == sizeof(struct sockaddr_pppol2tpin6)) {
 658                struct sockaddr_pppol2tpin6 *sp6 =
 659                        (struct sockaddr_pppol2tpin6 *) sp;
 660                fd = sp6->pppol2tp.fd;
 661                tunnel_id = sp6->pppol2tp.s_tunnel;
 662                peer_tunnel_id = sp6->pppol2tp.d_tunnel;
 663                session_id = sp6->pppol2tp.s_session;
 664                peer_session_id = sp6->pppol2tp.d_session;
 665        } else if (sockaddr_len == sizeof(struct sockaddr_pppol2tpv3in6)) {
 666                struct sockaddr_pppol2tpv3in6 *sp6 =
 667                        (struct sockaddr_pppol2tpv3in6 *) sp;
 668                ver = 3;
 669                fd = sp6->pppol2tp.fd;
 670                tunnel_id = sp6->pppol2tp.s_tunnel;
 671                peer_tunnel_id = sp6->pppol2tp.d_tunnel;
 672                session_id = sp6->pppol2tp.s_session;
 673                peer_session_id = sp6->pppol2tp.d_session;
 674        } else {
 675                error = -EINVAL;
 676                goto end; /* bad socket address */
 677        }
 678
 679        /* Don't bind if tunnel_id is 0 */
 680        error = -EINVAL;
 681        if (tunnel_id == 0)
 682                goto end;
 683
 684        tunnel = l2tp_tunnel_get(sock_net(sk), tunnel_id);
 685        if (tunnel)
 686                drop_tunnel = true;
 687
 688        /* Special case: create tunnel context if session_id and
 689         * peer_session_id is 0. Otherwise look up tunnel using supplied
 690         * tunnel id.
 691         */
 692        if ((session_id == 0) && (peer_session_id == 0)) {
 693                if (tunnel == NULL) {
 694                        struct l2tp_tunnel_cfg tcfg = {
 695                                .encap = L2TP_ENCAPTYPE_UDP,
 696                                .debug = 0,
 697                        };
 698                        error = l2tp_tunnel_create(sock_net(sk), fd, ver, tunnel_id, peer_tunnel_id, &tcfg, &tunnel);
 699                        if (error < 0)
 700                                goto end;
 701                }
 702        } else {
 703                /* Error if we can't find the tunnel */
 704                error = -ENOENT;
 705                if (tunnel == NULL)
 706                        goto end;
 707
 708                /* Error if socket is not prepped */
 709                if (tunnel->sock == NULL)
 710                        goto end;
 711        }
 712
 713        if (tunnel->recv_payload_hook == NULL)
 714                tunnel->recv_payload_hook = pppol2tp_recv_payload_hook;
 715
 716        if (tunnel->peer_tunnel_id == 0)
 717                tunnel->peer_tunnel_id = peer_tunnel_id;
 718
 719        session = l2tp_session_get(sock_net(sk), tunnel, session_id);
 720        if (session) {
 721                drop_refcnt = true;
 722                ps = l2tp_session_priv(session);
 723
 724                /* Using a pre-existing session is fine as long as it hasn't
 725                 * been connected yet.
 726                 */
 727                mutex_lock(&ps->sk_lock);
 728                if (rcu_dereference_protected(ps->sk,
 729                                              lockdep_is_held(&ps->sk_lock))) {
 730                        mutex_unlock(&ps->sk_lock);
 731                        error = -EEXIST;
 732                        goto end;
 733                }
 734        } else {
 735                /* Default MTU must allow space for UDP/L2TP/PPP headers */
 736                cfg.mtu = 1500 - PPPOL2TP_HEADER_OVERHEAD;
 737                cfg.mru = cfg.mtu;
 738
 739                session = l2tp_session_create(sizeof(struct pppol2tp_session),
 740                                              tunnel, session_id,
 741                                              peer_session_id, &cfg);
 742                if (IS_ERR(session)) {
 743                        error = PTR_ERR(session);
 744                        goto end;
 745                }
 746
 747                pppol2tp_session_init(session);
 748                ps = l2tp_session_priv(session);
 749                l2tp_session_inc_refcount(session);
 750
 751                mutex_lock(&ps->sk_lock);
 752                error = l2tp_session_register(session, tunnel);
 753                if (error < 0) {
 754                        mutex_unlock(&ps->sk_lock);
 755                        kfree(session);
 756                        goto end;
 757                }
 758                drop_refcnt = true;
 759        }
 760
 761        /* Special case: if source & dest session_id == 0x0000, this
 762         * socket is being created to manage the tunnel. Just set up
 763         * the internal context for use by ioctl() and sockopt()
 764         * handlers.
 765         */
 766        if ((session->session_id == 0) &&
 767            (session->peer_session_id == 0)) {
 768                error = 0;
 769                goto out_no_ppp;
 770        }
 771
 772        /* The only header we need to worry about is the L2TP
 773         * header. This size is different depending on whether
 774         * sequence numbers are enabled for the data channel.
 775         */
 776        po->chan.hdrlen = PPPOL2TP_L2TP_HDR_SIZE_NOSEQ;
 777
 778        po->chan.private = sk;
 779        po->chan.ops     = &pppol2tp_chan_ops;
 780        po->chan.mtu     = session->mtu;
 781
 782        error = ppp_register_net_channel(sock_net(sk), &po->chan);
 783        if (error) {
 784                mutex_unlock(&ps->sk_lock);
 785                goto end;
 786        }
 787
 788out_no_ppp:
 789        /* This is how we get the session context from the socket. */
 790        sock_hold(sk);
 791        sk->sk_user_data = session;
 792        rcu_assign_pointer(ps->sk, sk);
 793        mutex_unlock(&ps->sk_lock);
 794
 795        /* Keep the reference we've grabbed on the session: sk doesn't expect
 796         * the session to disappear. pppol2tp_session_destruct() is responsible
 797         * for dropping it.
 798         */
 799        drop_refcnt = false;
 800
 801        sk->sk_state = PPPOX_CONNECTED;
 802        l2tp_info(session, L2TP_MSG_CONTROL, "%s: created\n",
 803                  session->name);
 804
 805end:
 806        if (drop_refcnt)
 807                l2tp_session_dec_refcount(session);
 808        if (drop_tunnel)
 809                l2tp_tunnel_dec_refcount(tunnel);
 810        release_sock(sk);
 811
 812        return error;
 813}
 814
 815#ifdef CONFIG_L2TP_V3
 816
 817/* Called when creating sessions via the netlink interface. */
 818static int pppol2tp_session_create(struct net *net, struct l2tp_tunnel *tunnel,
 819                                   u32 session_id, u32 peer_session_id,
 820                                   struct l2tp_session_cfg *cfg)
 821{
 822        int error;
 823        struct l2tp_session *session;
 824
 825        /* Error if tunnel socket is not prepped */
 826        if (!tunnel->sock) {
 827                error = -ENOENT;
 828                goto err;
 829        }
 830
 831        /* Default MTU values. */
 832        if (cfg->mtu == 0)
 833                cfg->mtu = 1500 - PPPOL2TP_HEADER_OVERHEAD;
 834        if (cfg->mru == 0)
 835                cfg->mru = cfg->mtu;
 836
 837        /* Allocate and initialize a new session context. */
 838        session = l2tp_session_create(sizeof(struct pppol2tp_session),
 839                                      tunnel, session_id,
 840                                      peer_session_id, cfg);
 841        if (IS_ERR(session)) {
 842                error = PTR_ERR(session);
 843                goto err;
 844        }
 845
 846        pppol2tp_session_init(session);
 847
 848        error = l2tp_session_register(session, tunnel);
 849        if (error < 0)
 850                goto err_sess;
 851
 852        return 0;
 853
 854err_sess:
 855        kfree(session);
 856err:
 857        return error;
 858}
 859
 860#endif /* CONFIG_L2TP_V3 */
 861
 862/* getname() support.
 863 */
 864static int pppol2tp_getname(struct socket *sock, struct sockaddr *uaddr,
 865                            int *usockaddr_len, int peer)
 866{
 867        int len = 0;
 868        int error = 0;
 869        struct l2tp_session *session;
 870        struct l2tp_tunnel *tunnel;
 871        struct sock *sk = sock->sk;
 872        struct inet_sock *inet;
 873        struct pppol2tp_session *pls;
 874
 875        error = -ENOTCONN;
 876        if (sk == NULL)
 877                goto end;
 878        if (!(sk->sk_state & PPPOX_CONNECTED))
 879                goto end;
 880
 881        error = -EBADF;
 882        session = pppol2tp_sock_to_session(sk);
 883        if (session == NULL)
 884                goto end;
 885
 886        pls = l2tp_session_priv(session);
 887        tunnel = session->tunnel;
 888
 889        inet = inet_sk(tunnel->sock);
 890        if ((tunnel->version == 2) && (tunnel->sock->sk_family == AF_INET)) {
 891                struct sockaddr_pppol2tp sp;
 892                len = sizeof(sp);
 893                memset(&sp, 0, len);
 894                sp.sa_family    = AF_PPPOX;
 895                sp.sa_protocol  = PX_PROTO_OL2TP;
 896                sp.pppol2tp.fd  = tunnel->fd;
 897                sp.pppol2tp.pid = pls->owner;
 898                sp.pppol2tp.s_tunnel = tunnel->tunnel_id;
 899                sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id;
 900                sp.pppol2tp.s_session = session->session_id;
 901                sp.pppol2tp.d_session = session->peer_session_id;
 902                sp.pppol2tp.addr.sin_family = AF_INET;
 903                sp.pppol2tp.addr.sin_port = inet->inet_dport;
 904                sp.pppol2tp.addr.sin_addr.s_addr = inet->inet_daddr;
 905                memcpy(uaddr, &sp, len);
 906#if IS_ENABLED(CONFIG_IPV6)
 907        } else if ((tunnel->version == 2) &&
 908                   (tunnel->sock->sk_family == AF_INET6)) {
 909                struct sockaddr_pppol2tpin6 sp;
 910
 911                len = sizeof(sp);
 912                memset(&sp, 0, len);
 913                sp.sa_family    = AF_PPPOX;
 914                sp.sa_protocol  = PX_PROTO_OL2TP;
 915                sp.pppol2tp.fd  = tunnel->fd;
 916                sp.pppol2tp.pid = pls->owner;
 917                sp.pppol2tp.s_tunnel = tunnel->tunnel_id;
 918                sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id;
 919                sp.pppol2tp.s_session = session->session_id;
 920                sp.pppol2tp.d_session = session->peer_session_id;
 921                sp.pppol2tp.addr.sin6_family = AF_INET6;
 922                sp.pppol2tp.addr.sin6_port = inet->inet_dport;
 923                memcpy(&sp.pppol2tp.addr.sin6_addr, &tunnel->sock->sk_v6_daddr,
 924                       sizeof(tunnel->sock->sk_v6_daddr));
 925                memcpy(uaddr, &sp, len);
 926        } else if ((tunnel->version == 3) &&
 927                   (tunnel->sock->sk_family == AF_INET6)) {
 928                struct sockaddr_pppol2tpv3in6 sp;
 929
 930                len = sizeof(sp);
 931                memset(&sp, 0, len);
 932                sp.sa_family    = AF_PPPOX;
 933                sp.sa_protocol  = PX_PROTO_OL2TP;
 934                sp.pppol2tp.fd  = tunnel->fd;
 935                sp.pppol2tp.pid = pls->owner;
 936                sp.pppol2tp.s_tunnel = tunnel->tunnel_id;
 937                sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id;
 938                sp.pppol2tp.s_session = session->session_id;
 939                sp.pppol2tp.d_session = session->peer_session_id;
 940                sp.pppol2tp.addr.sin6_family = AF_INET6;
 941                sp.pppol2tp.addr.sin6_port = inet->inet_dport;
 942                memcpy(&sp.pppol2tp.addr.sin6_addr, &tunnel->sock->sk_v6_daddr,
 943                       sizeof(tunnel->sock->sk_v6_daddr));
 944                memcpy(uaddr, &sp, len);
 945#endif
 946        } else if (tunnel->version == 3) {
 947                struct sockaddr_pppol2tpv3 sp;
 948                len = sizeof(sp);
 949                memset(&sp, 0, len);
 950                sp.sa_family    = AF_PPPOX;
 951                sp.sa_protocol  = PX_PROTO_OL2TP;
 952                sp.pppol2tp.fd  = tunnel->fd;
 953                sp.pppol2tp.pid = pls->owner;
 954                sp.pppol2tp.s_tunnel = tunnel->tunnel_id;
 955                sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id;
 956                sp.pppol2tp.s_session = session->session_id;
 957                sp.pppol2tp.d_session = session->peer_session_id;
 958                sp.pppol2tp.addr.sin_family = AF_INET;
 959                sp.pppol2tp.addr.sin_port = inet->inet_dport;
 960                sp.pppol2tp.addr.sin_addr.s_addr = inet->inet_daddr;
 961                memcpy(uaddr, &sp, len);
 962        }
 963
 964        *usockaddr_len = len;
 965        error = 0;
 966
 967        sock_put(sk);
 968end:
 969        return error;
 970}
 971
 972/****************************************************************************
 973 * ioctl() handlers.
 974 *
 975 * The PPPoX socket is created for L2TP sessions: tunnels have their own UDP
 976 * sockets. However, in order to control kernel tunnel features, we allow
 977 * userspace to create a special "tunnel" PPPoX socket which is used for
 978 * control only.  Tunnel PPPoX sockets have session_id == 0 and simply allow
 979 * the user application to issue L2TP setsockopt(), getsockopt() and ioctl()
 980 * calls.
 981 ****************************************************************************/
 982
 983static void pppol2tp_copy_stats(struct pppol2tp_ioc_stats *dest,
 984                                struct l2tp_stats *stats)
 985{
 986        dest->tx_packets = atomic_long_read(&stats->tx_packets);
 987        dest->tx_bytes = atomic_long_read(&stats->tx_bytes);
 988        dest->tx_errors = atomic_long_read(&stats->tx_errors);
 989        dest->rx_packets = atomic_long_read(&stats->rx_packets);
 990        dest->rx_bytes = atomic_long_read(&stats->rx_bytes);
 991        dest->rx_seq_discards = atomic_long_read(&stats->rx_seq_discards);
 992        dest->rx_oos_packets = atomic_long_read(&stats->rx_oos_packets);
 993        dest->rx_errors = atomic_long_read(&stats->rx_errors);
 994}
 995
 996/* Session ioctl helper.
 997 */
 998static int pppol2tp_session_ioctl(struct l2tp_session *session,
 999                                  unsigned int cmd, unsigned long arg)
1000{
1001        struct ifreq ifr;
1002        int err = 0;
1003        struct sock *sk;
1004        int val = (int) arg;
1005        struct pppol2tp_session *ps = l2tp_session_priv(session);
1006        struct l2tp_tunnel *tunnel = session->tunnel;
1007        struct pppol2tp_ioc_stats stats;
1008
1009        l2tp_dbg(session, L2TP_MSG_CONTROL,
1010                 "%s: pppol2tp_session_ioctl(cmd=%#x, arg=%#lx)\n",
1011                 session->name, cmd, arg);
1012
1013        sk = pppol2tp_session_get_sock(session);
1014        if (!sk)
1015                return -EBADR;
1016
1017        switch (cmd) {
1018        case SIOCGIFMTU:
1019                err = -ENXIO;
1020                if (!(sk->sk_state & PPPOX_CONNECTED))
1021                        break;
1022
1023                err = -EFAULT;
1024                if (copy_from_user(&ifr, (void __user *) arg, sizeof(struct ifreq)))
1025                        break;
1026                ifr.ifr_mtu = session->mtu;
1027                if (copy_to_user((void __user *) arg, &ifr, sizeof(struct ifreq)))
1028                        break;
1029
1030                l2tp_info(session, L2TP_MSG_CONTROL, "%s: get mtu=%d\n",
1031                          session->name, session->mtu);
1032                err = 0;
1033                break;
1034
1035        case SIOCSIFMTU:
1036                err = -ENXIO;
1037                if (!(sk->sk_state & PPPOX_CONNECTED))
1038                        break;
1039
1040                err = -EFAULT;
1041                if (copy_from_user(&ifr, (void __user *) arg, sizeof(struct ifreq)))
1042                        break;
1043
1044                session->mtu = ifr.ifr_mtu;
1045
1046                l2tp_info(session, L2TP_MSG_CONTROL, "%s: set mtu=%d\n",
1047                          session->name, session->mtu);
1048                err = 0;
1049                break;
1050
1051        case PPPIOCGMRU:
1052                err = -ENXIO;
1053                if (!(sk->sk_state & PPPOX_CONNECTED))
1054                        break;
1055
1056                err = -EFAULT;
1057                if (put_user(session->mru, (int __user *) arg))
1058                        break;
1059
1060                l2tp_info(session, L2TP_MSG_CONTROL, "%s: get mru=%d\n",
1061                          session->name, session->mru);
1062                err = 0;
1063                break;
1064
1065        case PPPIOCSMRU:
1066                err = -ENXIO;
1067                if (!(sk->sk_state & PPPOX_CONNECTED))
1068                        break;
1069
1070                err = -EFAULT;
1071                if (get_user(val, (int __user *) arg))
1072                        break;
1073
1074                session->mru = val;
1075                l2tp_info(session, L2TP_MSG_CONTROL, "%s: set mru=%d\n",
1076                          session->name, session->mru);
1077                err = 0;
1078                break;
1079
1080        case PPPIOCGFLAGS:
1081                err = -EFAULT;
1082                if (put_user(ps->flags, (int __user *) arg))
1083                        break;
1084
1085                l2tp_info(session, L2TP_MSG_CONTROL, "%s: get flags=%d\n",
1086                          session->name, ps->flags);
1087                err = 0;
1088                break;
1089
1090        case PPPIOCSFLAGS:
1091                err = -EFAULT;
1092                if (get_user(val, (int __user *) arg))
1093                        break;
1094                ps->flags = val;
1095                l2tp_info(session, L2TP_MSG_CONTROL, "%s: set flags=%d\n",
1096                          session->name, ps->flags);
1097                err = 0;
1098                break;
1099
1100        case PPPIOCGL2TPSTATS:
1101                err = -ENXIO;
1102                if (!(sk->sk_state & PPPOX_CONNECTED))
1103                        break;
1104
1105                memset(&stats, 0, sizeof(stats));
1106                stats.tunnel_id = tunnel->tunnel_id;
1107                stats.session_id = session->session_id;
1108                pppol2tp_copy_stats(&stats, &session->stats);
1109                if (copy_to_user((void __user *) arg, &stats,
1110                                 sizeof(stats)))
1111                        break;
1112                l2tp_info(session, L2TP_MSG_CONTROL, "%s: get L2TP stats\n",
1113                          session->name);
1114                err = 0;
1115                break;
1116
1117        default:
1118                err = -ENOSYS;
1119                break;
1120        }
1121
1122        sock_put(sk);
1123
1124        return err;
1125}
1126
1127/* Tunnel ioctl helper.
1128 *
1129 * Note the special handling for PPPIOCGL2TPSTATS below. If the ioctl data
1130 * specifies a session_id, the session ioctl handler is called. This allows an
1131 * application to retrieve session stats via a tunnel socket.
1132 */
1133static int pppol2tp_tunnel_ioctl(struct l2tp_tunnel *tunnel,
1134                                 unsigned int cmd, unsigned long arg)
1135{
1136        int err = 0;
1137        struct sock *sk;
1138        struct pppol2tp_ioc_stats stats;
1139
1140        l2tp_dbg(tunnel, L2TP_MSG_CONTROL,
1141                 "%s: pppol2tp_tunnel_ioctl(cmd=%#x, arg=%#lx)\n",
1142                 tunnel->name, cmd, arg);
1143
1144        sk = tunnel->sock;
1145        sock_hold(sk);
1146
1147        switch (cmd) {
1148        case PPPIOCGL2TPSTATS:
1149                err = -ENXIO;
1150                if (!(sk->sk_state & PPPOX_CONNECTED))
1151                        break;
1152
1153                if (copy_from_user(&stats, (void __user *) arg,
1154                                   sizeof(stats))) {
1155                        err = -EFAULT;
1156                        break;
1157                }
1158                if (stats.session_id != 0) {
1159                        /* resend to session ioctl handler */
1160                        struct l2tp_session *session =
1161                                l2tp_session_get(sock_net(sk), tunnel,
1162                                                 stats.session_id);
1163
1164                        if (session) {
1165                                err = pppol2tp_session_ioctl(session, cmd,
1166                                                             arg);
1167                                l2tp_session_dec_refcount(session);
1168                        } else {
1169                                err = -EBADR;
1170                        }
1171                        break;
1172                }
1173#ifdef CONFIG_XFRM
1174                stats.using_ipsec = (sk->sk_policy[0] || sk->sk_policy[1]) ? 1 : 0;
1175#endif
1176                pppol2tp_copy_stats(&stats, &tunnel->stats);
1177                if (copy_to_user((void __user *) arg, &stats, sizeof(stats))) {
1178                        err = -EFAULT;
1179                        break;
1180                }
1181                l2tp_info(tunnel, L2TP_MSG_CONTROL, "%s: get L2TP stats\n",
1182                          tunnel->name);
1183                err = 0;
1184                break;
1185
1186        default:
1187                err = -ENOSYS;
1188                break;
1189        }
1190
1191        sock_put(sk);
1192
1193        return err;
1194}
1195
1196/* Main ioctl() handler.
1197 * Dispatch to tunnel or session helpers depending on the socket.
1198 */
1199static int pppol2tp_ioctl(struct socket *sock, unsigned int cmd,
1200                          unsigned long arg)
1201{
1202        struct sock *sk = sock->sk;
1203        struct l2tp_session *session;
1204        struct l2tp_tunnel *tunnel;
1205        int err;
1206
1207        if (!sk)
1208                return 0;
1209
1210        err = -EBADF;
1211        if (sock_flag(sk, SOCK_DEAD) != 0)
1212                goto end;
1213
1214        err = -ENOTCONN;
1215        if ((sk->sk_user_data == NULL) ||
1216            (!(sk->sk_state & (PPPOX_CONNECTED | PPPOX_BOUND))))
1217                goto end;
1218
1219        /* Get session context from the socket */
1220        err = -EBADF;
1221        session = pppol2tp_sock_to_session(sk);
1222        if (session == NULL)
1223                goto end;
1224
1225        /* Special case: if session's session_id is zero, treat ioctl as a
1226         * tunnel ioctl
1227         */
1228        if ((session->session_id == 0) &&
1229            (session->peer_session_id == 0)) {
1230                tunnel = session->tunnel;
1231                err = pppol2tp_tunnel_ioctl(tunnel, cmd, arg);
1232                goto end_put_sess;
1233        }
1234
1235        err = pppol2tp_session_ioctl(session, cmd, arg);
1236
1237end_put_sess:
1238        sock_put(sk);
1239end:
1240        return err;
1241}
1242
1243/*****************************************************************************
1244 * setsockopt() / getsockopt() support.
1245 *
1246 * The PPPoX socket is created for L2TP sessions: tunnels have their own UDP
1247 * sockets. In order to control kernel tunnel features, we allow userspace to
1248 * create a special "tunnel" PPPoX socket which is used for control only.
1249 * Tunnel PPPoX sockets have session_id == 0 and simply allow the user
1250 * application to issue L2TP setsockopt(), getsockopt() and ioctl() calls.
1251 *****************************************************************************/
1252
1253/* Tunnel setsockopt() helper.
1254 */
1255static int pppol2tp_tunnel_setsockopt(struct sock *sk,
1256                                      struct l2tp_tunnel *tunnel,
1257                                      int optname, int val)
1258{
1259        int err = 0;
1260
1261        switch (optname) {
1262        case PPPOL2TP_SO_DEBUG:
1263                tunnel->debug = val;
1264                l2tp_info(tunnel, L2TP_MSG_CONTROL, "%s: set debug=%x\n",
1265                          tunnel->name, tunnel->debug);
1266                break;
1267
1268        default:
1269                err = -ENOPROTOOPT;
1270                break;
1271        }
1272
1273        return err;
1274}
1275
1276/* Session setsockopt helper.
1277 */
1278static int pppol2tp_session_setsockopt(struct sock *sk,
1279                                       struct l2tp_session *session,
1280                                       int optname, int val)
1281{
1282        int err = 0;
1283
1284        switch (optname) {
1285        case PPPOL2TP_SO_RECVSEQ:
1286                if ((val != 0) && (val != 1)) {
1287                        err = -EINVAL;
1288                        break;
1289                }
1290                session->recv_seq = !!val;
1291                l2tp_info(session, L2TP_MSG_CONTROL,
1292                          "%s: set recv_seq=%d\n",
1293                          session->name, session->recv_seq);
1294                break;
1295
1296        case PPPOL2TP_SO_SENDSEQ:
1297                if ((val != 0) && (val != 1)) {
1298                        err = -EINVAL;
1299                        break;
1300                }
1301                session->send_seq = !!val;
1302                {
1303                        struct pppox_sock *po = pppox_sk(sk);
1304
1305                        po->chan.hdrlen = val ? PPPOL2TP_L2TP_HDR_SIZE_SEQ :
1306                                PPPOL2TP_L2TP_HDR_SIZE_NOSEQ;
1307                }
1308                l2tp_session_set_header_len(session, session->tunnel->version);
1309                l2tp_info(session, L2TP_MSG_CONTROL,
1310                          "%s: set send_seq=%d\n",
1311                          session->name, session->send_seq);
1312                break;
1313
1314        case PPPOL2TP_SO_LNSMODE:
1315                if ((val != 0) && (val != 1)) {
1316                        err = -EINVAL;
1317                        break;
1318                }
1319                session->lns_mode = !!val;
1320                l2tp_info(session, L2TP_MSG_CONTROL,
1321                          "%s: set lns_mode=%d\n",
1322                          session->name, session->lns_mode);
1323                break;
1324
1325        case PPPOL2TP_SO_DEBUG:
1326                session->debug = val;
1327                l2tp_info(session, L2TP_MSG_CONTROL, "%s: set debug=%x\n",
1328                          session->name, session->debug);
1329                break;
1330
1331        case PPPOL2TP_SO_REORDERTO:
1332                session->reorder_timeout = msecs_to_jiffies(val);
1333                l2tp_info(session, L2TP_MSG_CONTROL,
1334                          "%s: set reorder_timeout=%d\n",
1335                          session->name, session->reorder_timeout);
1336                break;
1337
1338        default:
1339                err = -ENOPROTOOPT;
1340                break;
1341        }
1342
1343        return err;
1344}
1345
1346/* Main setsockopt() entry point.
1347 * Does API checks, then calls either the tunnel or session setsockopt
1348 * handler, according to whether the PPPoL2TP socket is a for a regular
1349 * session or the special tunnel type.
1350 */
1351static int pppol2tp_setsockopt(struct socket *sock, int level, int optname,
1352                               char __user *optval, unsigned int optlen)
1353{
1354        struct sock *sk = sock->sk;
1355        struct l2tp_session *session;
1356        struct l2tp_tunnel *tunnel;
1357        int val;
1358        int err;
1359
1360        if (level != SOL_PPPOL2TP)
1361                return -EINVAL;
1362
1363        if (optlen < sizeof(int))
1364                return -EINVAL;
1365
1366        if (get_user(val, (int __user *)optval))
1367                return -EFAULT;
1368
1369        err = -ENOTCONN;
1370        if (sk->sk_user_data == NULL)
1371                goto end;
1372
1373        /* Get session context from the socket */
1374        err = -EBADF;
1375        session = pppol2tp_sock_to_session(sk);
1376        if (session == NULL)
1377                goto end;
1378
1379        /* Special case: if session_id == 0x0000, treat as operation on tunnel
1380         */
1381        if ((session->session_id == 0) &&
1382            (session->peer_session_id == 0)) {
1383                tunnel = session->tunnel;
1384                err = pppol2tp_tunnel_setsockopt(sk, tunnel, optname, val);
1385        } else {
1386                err = pppol2tp_session_setsockopt(sk, session, optname, val);
1387        }
1388
1389        sock_put(sk);
1390end:
1391        return err;
1392}
1393
1394/* Tunnel getsockopt helper. Called with sock locked.
1395 */
1396static int pppol2tp_tunnel_getsockopt(struct sock *sk,
1397                                      struct l2tp_tunnel *tunnel,
1398                                      int optname, int *val)
1399{
1400        int err = 0;
1401
1402        switch (optname) {
1403        case PPPOL2TP_SO_DEBUG:
1404                *val = tunnel->debug;
1405                l2tp_info(tunnel, L2TP_MSG_CONTROL, "%s: get debug=%x\n",
1406                          tunnel->name, tunnel->debug);
1407                break;
1408
1409        default:
1410                err = -ENOPROTOOPT;
1411                break;
1412        }
1413
1414        return err;
1415}
1416
1417/* Session getsockopt helper. Called with sock locked.
1418 */
1419static int pppol2tp_session_getsockopt(struct sock *sk,
1420                                       struct l2tp_session *session,
1421                                       int optname, int *val)
1422{
1423        int err = 0;
1424
1425        switch (optname) {
1426        case PPPOL2TP_SO_RECVSEQ:
1427                *val = session->recv_seq;
1428                l2tp_info(session, L2TP_MSG_CONTROL,
1429                          "%s: get recv_seq=%d\n", session->name, *val);
1430                break;
1431
1432        case PPPOL2TP_SO_SENDSEQ:
1433                *val = session->send_seq;
1434                l2tp_info(session, L2TP_MSG_CONTROL,
1435                          "%s: get send_seq=%d\n", session->name, *val);
1436                break;
1437
1438        case PPPOL2TP_SO_LNSMODE:
1439                *val = session->lns_mode;
1440                l2tp_info(session, L2TP_MSG_CONTROL,
1441                          "%s: get lns_mode=%d\n", session->name, *val);
1442                break;
1443
1444        case PPPOL2TP_SO_DEBUG:
1445                *val = session->debug;
1446                l2tp_info(session, L2TP_MSG_CONTROL, "%s: get debug=%d\n",
1447                          session->name, *val);
1448                break;
1449
1450        case PPPOL2TP_SO_REORDERTO:
1451                *val = (int) jiffies_to_msecs(session->reorder_timeout);
1452                l2tp_info(session, L2TP_MSG_CONTROL,
1453                          "%s: get reorder_timeout=%d\n", session->name, *val);
1454                break;
1455
1456        default:
1457                err = -ENOPROTOOPT;
1458        }
1459
1460        return err;
1461}
1462
1463/* Main getsockopt() entry point.
1464 * Does API checks, then calls either the tunnel or session getsockopt
1465 * handler, according to whether the PPPoX socket is a for a regular session
1466 * or the special tunnel type.
1467 */
1468static int pppol2tp_getsockopt(struct socket *sock, int level, int optname,
1469                               char __user *optval, int __user *optlen)
1470{
1471        struct sock *sk = sock->sk;
1472        struct l2tp_session *session;
1473        struct l2tp_tunnel *tunnel;
1474        int val, len;
1475        int err;
1476
1477        if (level != SOL_PPPOL2TP)
1478                return -EINVAL;
1479
1480        if (get_user(len, optlen))
1481                return -EFAULT;
1482
1483        len = min_t(unsigned int, len, sizeof(int));
1484
1485        if (len < 0)
1486                return -EINVAL;
1487
1488        err = -ENOTCONN;
1489        if (sk->sk_user_data == NULL)
1490                goto end;
1491
1492        /* Get the session context */
1493        err = -EBADF;
1494        session = pppol2tp_sock_to_session(sk);
1495        if (session == NULL)
1496                goto end;
1497
1498        /* Special case: if session_id == 0x0000, treat as operation on tunnel */
1499        if ((session->session_id == 0) &&
1500            (session->peer_session_id == 0)) {
1501                tunnel = session->tunnel;
1502                err = pppol2tp_tunnel_getsockopt(sk, tunnel, optname, &val);
1503                if (err)
1504                        goto end_put_sess;
1505        } else {
1506                err = pppol2tp_session_getsockopt(sk, session, optname, &val);
1507                if (err)
1508                        goto end_put_sess;
1509        }
1510
1511        err = -EFAULT;
1512        if (put_user(len, optlen))
1513                goto end_put_sess;
1514
1515        if (copy_to_user((void __user *) optval, &val, len))
1516                goto end_put_sess;
1517
1518        err = 0;
1519
1520end_put_sess:
1521        sock_put(sk);
1522end:
1523        return err;
1524}
1525
1526/*****************************************************************************
1527 * /proc filesystem for debug
1528 * Since the original pppol2tp driver provided /proc/net/pppol2tp for
1529 * L2TPv2, we dump only L2TPv2 tunnels and sessions here.
1530 *****************************************************************************/
1531
1532static unsigned int pppol2tp_net_id;
1533
1534#ifdef CONFIG_PROC_FS
1535
1536struct pppol2tp_seq_data {
1537        struct seq_net_private p;
1538        int tunnel_idx;                 /* current tunnel */
1539        int session_idx;                /* index of session within current tunnel */
1540        struct l2tp_tunnel *tunnel;
1541        struct l2tp_session *session;   /* NULL means get next tunnel */
1542};
1543
1544static void pppol2tp_next_tunnel(struct net *net, struct pppol2tp_seq_data *pd)
1545{
1546        for (;;) {
1547                pd->tunnel = l2tp_tunnel_find_nth(net, pd->tunnel_idx);
1548                pd->tunnel_idx++;
1549
1550                if (pd->tunnel == NULL)
1551                        break;
1552
1553                /* Ignore L2TPv3 tunnels */
1554                if (pd->tunnel->version < 3)
1555                        break;
1556        }
1557}
1558
1559static void pppol2tp_next_session(struct net *net, struct pppol2tp_seq_data *pd)
1560{
1561        pd->session = l2tp_session_get_nth(pd->tunnel, pd->session_idx);
1562        pd->session_idx++;
1563
1564        if (pd->session == NULL) {
1565                pd->session_idx = 0;
1566                pppol2tp_next_tunnel(net, pd);
1567        }
1568}
1569
1570static void *pppol2tp_seq_start(struct seq_file *m, loff_t *offs)
1571{
1572        struct pppol2tp_seq_data *pd = SEQ_START_TOKEN;
1573        loff_t pos = *offs;
1574        struct net *net;
1575
1576        if (!pos)
1577                goto out;
1578
1579        BUG_ON(m->private == NULL);
1580        pd = m->private;
1581        net = seq_file_net(m);
1582
1583        if (pd->tunnel == NULL)
1584                pppol2tp_next_tunnel(net, pd);
1585        else
1586                pppol2tp_next_session(net, pd);
1587
1588        /* NULL tunnel and session indicates end of list */
1589        if ((pd->tunnel == NULL) && (pd->session == NULL))
1590                pd = NULL;
1591
1592out:
1593        return pd;
1594}
1595
1596static void *pppol2tp_seq_next(struct seq_file *m, void *v, loff_t *pos)
1597{
1598        (*pos)++;
1599        return NULL;
1600}
1601
1602static void pppol2tp_seq_stop(struct seq_file *p, void *v)
1603{
1604        /* nothing to do */
1605}
1606
1607static void pppol2tp_seq_tunnel_show(struct seq_file *m, void *v)
1608{
1609        struct l2tp_tunnel *tunnel = v;
1610
1611        seq_printf(m, "\nTUNNEL '%s', %c %d\n",
1612                   tunnel->name,
1613                   (tunnel == tunnel->sock->sk_user_data) ? 'Y' : 'N',
1614                   refcount_read(&tunnel->ref_count) - 1);
1615        seq_printf(m, " %08x %ld/%ld/%ld %ld/%ld/%ld\n",
1616                   tunnel->debug,
1617                   atomic_long_read(&tunnel->stats.tx_packets),
1618                   atomic_long_read(&tunnel->stats.tx_bytes),
1619                   atomic_long_read(&tunnel->stats.tx_errors),
1620                   atomic_long_read(&tunnel->stats.rx_packets),
1621                   atomic_long_read(&tunnel->stats.rx_bytes),
1622                   atomic_long_read(&tunnel->stats.rx_errors));
1623}
1624
1625static void pppol2tp_seq_session_show(struct seq_file *m, void *v)
1626{
1627        struct l2tp_session *session = v;
1628        struct l2tp_tunnel *tunnel = session->tunnel;
1629        unsigned char state;
1630        char user_data_ok;
1631        struct sock *sk;
1632        u32 ip = 0;
1633        u16 port = 0;
1634
1635        if (tunnel->sock) {
1636                struct inet_sock *inet = inet_sk(tunnel->sock);
1637                ip = ntohl(inet->inet_saddr);
1638                port = ntohs(inet->inet_sport);
1639        }
1640
1641        sk = pppol2tp_session_get_sock(session);
1642        if (sk) {
1643                state = sk->sk_state;
1644                user_data_ok = (session == sk->sk_user_data) ? 'Y' : 'N';
1645        } else {
1646                state = 0;
1647                user_data_ok = 'N';
1648        }
1649
1650        seq_printf(m, "  SESSION '%s' %08X/%d %04X/%04X -> "
1651                   "%04X/%04X %d %c\n",
1652                   session->name, ip, port,
1653                   tunnel->tunnel_id,
1654                   session->session_id,
1655                   tunnel->peer_tunnel_id,
1656                   session->peer_session_id,
1657                   state, user_data_ok);
1658        seq_printf(m, "   %d/%d/%c/%c/%s %08x %u\n",
1659                   session->mtu, session->mru,
1660                   session->recv_seq ? 'R' : '-',
1661                   session->send_seq ? 'S' : '-',
1662                   session->lns_mode ? "LNS" : "LAC",
1663                   session->debug,
1664                   jiffies_to_msecs(session->reorder_timeout));
1665        seq_printf(m, "   %hu/%hu %ld/%ld/%ld %ld/%ld/%ld\n",
1666                   session->nr, session->ns,
1667                   atomic_long_read(&session->stats.tx_packets),
1668                   atomic_long_read(&session->stats.tx_bytes),
1669                   atomic_long_read(&session->stats.tx_errors),
1670                   atomic_long_read(&session->stats.rx_packets),
1671                   atomic_long_read(&session->stats.rx_bytes),
1672                   atomic_long_read(&session->stats.rx_errors));
1673
1674        if (sk) {
1675                struct pppox_sock *po = pppox_sk(sk);
1676
1677                seq_printf(m, "   interface %s\n", ppp_dev_name(&po->chan));
1678                sock_put(sk);
1679        }
1680}
1681
1682static int pppol2tp_seq_show(struct seq_file *m, void *v)
1683{
1684        struct pppol2tp_seq_data *pd = v;
1685
1686        /* display header on line 1 */
1687        if (v == SEQ_START_TOKEN) {
1688                seq_puts(m, "PPPoL2TP driver info, " PPPOL2TP_DRV_VERSION "\n");
1689                seq_puts(m, "TUNNEL name, user-data-ok session-count\n");
1690                seq_puts(m, " debug tx-pkts/bytes/errs rx-pkts/bytes/errs\n");
1691                seq_puts(m, "  SESSION name, addr/port src-tid/sid "
1692                         "dest-tid/sid state user-data-ok\n");
1693                seq_puts(m, "   mtu/mru/rcvseq/sendseq/lns debug reorderto\n");
1694                seq_puts(m, "   nr/ns tx-pkts/bytes/errs rx-pkts/bytes/errs\n");
1695                goto out;
1696        }
1697
1698        /* Show the tunnel or session context.
1699         */
1700        if (!pd->session) {
1701                pppol2tp_seq_tunnel_show(m, pd->tunnel);
1702        } else {
1703                pppol2tp_seq_session_show(m, pd->session);
1704                l2tp_session_dec_refcount(pd->session);
1705        }
1706
1707out:
1708        return 0;
1709}
1710
1711static const struct seq_operations pppol2tp_seq_ops = {
1712        .start          = pppol2tp_seq_start,
1713        .next           = pppol2tp_seq_next,
1714        .stop           = pppol2tp_seq_stop,
1715        .show           = pppol2tp_seq_show,
1716};
1717
1718/* Called when our /proc file is opened. We allocate data for use when
1719 * iterating our tunnel / session contexts and store it in the private
1720 * data of the seq_file.
1721 */
1722static int pppol2tp_proc_open(struct inode *inode, struct file *file)
1723{
1724        return seq_open_net(inode, file, &pppol2tp_seq_ops,
1725                            sizeof(struct pppol2tp_seq_data));
1726}
1727
1728static const struct file_operations pppol2tp_proc_fops = {
1729        .open           = pppol2tp_proc_open,
1730        .read           = seq_read,
1731        .llseek         = seq_lseek,
1732        .release        = seq_release_net,
1733};
1734
1735#endif /* CONFIG_PROC_FS */
1736
1737/*****************************************************************************
1738 * Network namespace
1739 *****************************************************************************/
1740
1741static __net_init int pppol2tp_init_net(struct net *net)
1742{
1743        struct proc_dir_entry *pde;
1744        int err = 0;
1745
1746        pde = proc_create("pppol2tp", S_IRUGO, net->proc_net,
1747                          &pppol2tp_proc_fops);
1748        if (!pde) {
1749                err = -ENOMEM;
1750                goto out;
1751        }
1752
1753out:
1754        return err;
1755}
1756
1757static __net_exit void pppol2tp_exit_net(struct net *net)
1758{
1759        remove_proc_entry("pppol2tp", net->proc_net);
1760}
1761
1762static struct pernet_operations pppol2tp_net_ops = {
1763        .init = pppol2tp_init_net,
1764        .exit = pppol2tp_exit_net,
1765        .id   = &pppol2tp_net_id,
1766};
1767
1768/*****************************************************************************
1769 * Init and cleanup
1770 *****************************************************************************/
1771
1772static const struct proto_ops pppol2tp_ops = {
1773        .family         = AF_PPPOX,
1774        .owner          = THIS_MODULE,
1775        .release        = pppol2tp_release,
1776        .bind           = sock_no_bind,
1777        .connect        = pppol2tp_connect,
1778        .socketpair     = sock_no_socketpair,
1779        .accept         = sock_no_accept,
1780        .getname        = pppol2tp_getname,
1781        .poll           = datagram_poll,
1782        .listen         = sock_no_listen,
1783        .shutdown       = sock_no_shutdown,
1784        .setsockopt     = pppol2tp_setsockopt,
1785        .getsockopt     = pppol2tp_getsockopt,
1786        .sendmsg        = pppol2tp_sendmsg,
1787        .recvmsg        = pppol2tp_recvmsg,
1788        .mmap           = sock_no_mmap,
1789        .ioctl          = pppox_ioctl,
1790};
1791
1792static const struct pppox_proto pppol2tp_proto = {
1793        .create         = pppol2tp_create,
1794        .ioctl          = pppol2tp_ioctl,
1795        .owner          = THIS_MODULE,
1796};
1797
1798#ifdef CONFIG_L2TP_V3
1799
1800static const struct l2tp_nl_cmd_ops pppol2tp_nl_cmd_ops = {
1801        .session_create = pppol2tp_session_create,
1802        .session_delete = l2tp_session_delete,
1803};
1804
1805#endif /* CONFIG_L2TP_V3 */
1806
1807static int __init pppol2tp_init(void)
1808{
1809        int err;
1810
1811        err = register_pernet_device(&pppol2tp_net_ops);
1812        if (err)
1813                goto out;
1814
1815        err = proto_register(&pppol2tp_sk_proto, 0);
1816        if (err)
1817                goto out_unregister_pppol2tp_pernet;
1818
1819        err = register_pppox_proto(PX_PROTO_OL2TP, &pppol2tp_proto);
1820        if (err)
1821                goto out_unregister_pppol2tp_proto;
1822
1823#ifdef CONFIG_L2TP_V3
1824        err = l2tp_nl_register_ops(L2TP_PWTYPE_PPP, &pppol2tp_nl_cmd_ops);
1825        if (err)
1826                goto out_unregister_pppox;
1827#endif
1828
1829        pr_info("PPPoL2TP kernel driver, %s\n", PPPOL2TP_DRV_VERSION);
1830
1831out:
1832        return err;
1833
1834#ifdef CONFIG_L2TP_V3
1835out_unregister_pppox:
1836        unregister_pppox_proto(PX_PROTO_OL2TP);
1837#endif
1838out_unregister_pppol2tp_proto:
1839        proto_unregister(&pppol2tp_sk_proto);
1840out_unregister_pppol2tp_pernet:
1841        unregister_pernet_device(&pppol2tp_net_ops);
1842        goto out;
1843}
1844
1845static void __exit pppol2tp_exit(void)
1846{
1847#ifdef CONFIG_L2TP_V3
1848        l2tp_nl_unregister_ops(L2TP_PWTYPE_PPP);
1849#endif
1850        unregister_pppox_proto(PX_PROTO_OL2TP);
1851        proto_unregister(&pppol2tp_sk_proto);
1852        unregister_pernet_device(&pppol2tp_net_ops);
1853}
1854
1855module_init(pppol2tp_init);
1856module_exit(pppol2tp_exit);
1857
1858MODULE_AUTHOR("James Chapman <jchapman@katalix.com>");
1859MODULE_DESCRIPTION("PPP over L2TP over UDP");
1860MODULE_LICENSE("GPL");
1861MODULE_VERSION(PPPOL2TP_DRV_VERSION);
1862MODULE_ALIAS_NET_PF_PROTO(PF_PPPOX, PX_PROTO_OL2TP);
1863MODULE_ALIAS_L2TP_PWTYPE(7);
1864