File Index
Files and directories
Sign in
FILE

l2tp_ppp.c

File preview with syntax highlighting.

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