GNU Linux-libre 5.4.207-gnu1
[releases.git] / net / l2tp / l2tp_core.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * L2TP core.
4  *
5  * Copyright (c) 2008,2009,2010 Katalix Systems Ltd
6  *
7  * This file contains some code of the original L2TPv2 pppol2tp
8  * driver, which has the following copyright:
9  *
10  * Authors:     Martijn van Oosterhout <kleptog@svana.org>
11  *              James Chapman (jchapman@katalix.com)
12  * Contributors:
13  *              Michal Ostrowski <mostrows@speakeasy.net>
14  *              Arnaldo Carvalho de Melo <acme@xconectiva.com.br>
15  *              David S. Miller (davem@redhat.com)
16  */
17
18 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
19
20 #include <linux/module.h>
21 #include <linux/string.h>
22 #include <linux/list.h>
23 #include <linux/rculist.h>
24 #include <linux/uaccess.h>
25
26 #include <linux/kernel.h>
27 #include <linux/spinlock.h>
28 #include <linux/kthread.h>
29 #include <linux/sched.h>
30 #include <linux/slab.h>
31 #include <linux/errno.h>
32 #include <linux/jiffies.h>
33
34 #include <linux/netdevice.h>
35 #include <linux/net.h>
36 #include <linux/inetdevice.h>
37 #include <linux/skbuff.h>
38 #include <linux/init.h>
39 #include <linux/in.h>
40 #include <linux/ip.h>
41 #include <linux/udp.h>
42 #include <linux/l2tp.h>
43 #include <linux/hash.h>
44 #include <linux/sort.h>
45 #include <linux/file.h>
46 #include <linux/nsproxy.h>
47 #include <net/net_namespace.h>
48 #include <net/netns/generic.h>
49 #include <net/dst.h>
50 #include <net/ip.h>
51 #include <net/udp.h>
52 #include <net/udp_tunnel.h>
53 #include <net/inet_common.h>
54 #include <net/xfrm.h>
55 #include <net/protocol.h>
56 #include <net/inet6_connection_sock.h>
57 #include <net/inet_ecn.h>
58 #include <net/ip6_route.h>
59 #include <net/ip6_checksum.h>
60
61 #include <asm/byteorder.h>
62 #include <linux/atomic.h>
63
64 #include "l2tp_core.h"
65
66 #define L2TP_DRV_VERSION        "V2.0"
67
68 /* L2TP header constants */
69 #define L2TP_HDRFLAG_T     0x8000
70 #define L2TP_HDRFLAG_L     0x4000
71 #define L2TP_HDRFLAG_S     0x0800
72 #define L2TP_HDRFLAG_O     0x0200
73 #define L2TP_HDRFLAG_P     0x0100
74
75 #define L2TP_HDR_VER_MASK  0x000F
76 #define L2TP_HDR_VER_2     0x0002
77 #define L2TP_HDR_VER_3     0x0003
78
79 /* L2TPv3 default L2-specific sublayer */
80 #define L2TP_SLFLAG_S      0x40000000
81 #define L2TP_SL_SEQ_MASK   0x00ffffff
82
83 #define L2TP_HDR_SIZE_MAX               14
84
85 /* Default trace flags */
86 #define L2TP_DEFAULT_DEBUG_FLAGS        0
87
88 /* Private data stored for received packets in the skb.
89  */
90 struct l2tp_skb_cb {
91         u32                     ns;
92         u16                     has_seq;
93         u16                     length;
94         unsigned long           expires;
95 };
96
97 #define L2TP_SKB_CB(skb)        ((struct l2tp_skb_cb *) &skb->cb[sizeof(struct inet_skb_parm)])
98
99 static struct workqueue_struct *l2tp_wq;
100
101 /* per-net private data for this module */
102 static unsigned int l2tp_net_id;
103 struct l2tp_net {
104         struct list_head l2tp_tunnel_list;
105         spinlock_t l2tp_tunnel_list_lock;
106         struct hlist_head l2tp_session_hlist[L2TP_HASH_SIZE_2];
107         spinlock_t l2tp_session_hlist_lock;
108 };
109
110 #if IS_ENABLED(CONFIG_IPV6)
111 static bool l2tp_sk_is_v6(struct sock *sk)
112 {
113         return sk->sk_family == PF_INET6 &&
114                !ipv6_addr_v4mapped(&sk->sk_v6_daddr);
115 }
116 #endif
117
118 static inline struct l2tp_tunnel *l2tp_tunnel(struct sock *sk)
119 {
120         return sk->sk_user_data;
121 }
122
123 static inline struct l2tp_net *l2tp_pernet(const struct net *net)
124 {
125         BUG_ON(!net);
126
127         return net_generic(net, l2tp_net_id);
128 }
129
130 /* Session hash global list for L2TPv3.
131  * The session_id SHOULD be random according to RFC3931, but several
132  * L2TP implementations use incrementing session_ids.  So we do a real
133  * hash on the session_id, rather than a simple bitmask.
134  */
135 static inline struct hlist_head *
136 l2tp_session_id_hash_2(struct l2tp_net *pn, u32 session_id)
137 {
138         return &pn->l2tp_session_hlist[hash_32(session_id, L2TP_HASH_BITS_2)];
139
140 }
141
142 /* Session hash list.
143  * The session_id SHOULD be random according to RFC2661, but several
144  * L2TP implementations (Cisco and Microsoft) use incrementing
145  * session_ids.  So we do a real hash on the session_id, rather than a
146  * simple bitmask.
147  */
148 static inline struct hlist_head *
149 l2tp_session_id_hash(struct l2tp_tunnel *tunnel, u32 session_id)
150 {
151         return &tunnel->session_hlist[hash_32(session_id, L2TP_HASH_BITS)];
152 }
153
154 void l2tp_tunnel_free(struct l2tp_tunnel *tunnel)
155 {
156         sock_put(tunnel->sock);
157         /* the tunnel is freed in the socket destructor */
158 }
159 EXPORT_SYMBOL(l2tp_tunnel_free);
160
161 /* Lookup a tunnel. A new reference is held on the returned tunnel. */
162 struct l2tp_tunnel *l2tp_tunnel_get(const struct net *net, u32 tunnel_id)
163 {
164         const struct l2tp_net *pn = l2tp_pernet(net);
165         struct l2tp_tunnel *tunnel;
166
167         rcu_read_lock_bh();
168         list_for_each_entry_rcu(tunnel, &pn->l2tp_tunnel_list, list) {
169                 if (tunnel->tunnel_id == tunnel_id &&
170                     refcount_inc_not_zero(&tunnel->ref_count)) {
171                         rcu_read_unlock_bh();
172
173                         return tunnel;
174                 }
175         }
176         rcu_read_unlock_bh();
177
178         return NULL;
179 }
180 EXPORT_SYMBOL_GPL(l2tp_tunnel_get);
181
182 struct l2tp_tunnel *l2tp_tunnel_get_nth(const struct net *net, int nth)
183 {
184         const struct l2tp_net *pn = l2tp_pernet(net);
185         struct l2tp_tunnel *tunnel;
186         int count = 0;
187
188         rcu_read_lock_bh();
189         list_for_each_entry_rcu(tunnel, &pn->l2tp_tunnel_list, list) {
190                 if (++count > nth &&
191                     refcount_inc_not_zero(&tunnel->ref_count)) {
192                         rcu_read_unlock_bh();
193                         return tunnel;
194                 }
195         }
196         rcu_read_unlock_bh();
197
198         return NULL;
199 }
200 EXPORT_SYMBOL_GPL(l2tp_tunnel_get_nth);
201
202 struct l2tp_session *l2tp_tunnel_get_session(struct l2tp_tunnel *tunnel,
203                                              u32 session_id)
204 {
205         struct hlist_head *session_list;
206         struct l2tp_session *session;
207
208         session_list = l2tp_session_id_hash(tunnel, session_id);
209
210         read_lock_bh(&tunnel->hlist_lock);
211         hlist_for_each_entry(session, session_list, hlist)
212                 if (session->session_id == session_id) {
213                         l2tp_session_inc_refcount(session);
214                         read_unlock_bh(&tunnel->hlist_lock);
215
216                         return session;
217                 }
218         read_unlock_bh(&tunnel->hlist_lock);
219
220         return NULL;
221 }
222 EXPORT_SYMBOL_GPL(l2tp_tunnel_get_session);
223
224 struct l2tp_session *l2tp_session_get(const struct net *net, u32 session_id)
225 {
226         struct hlist_head *session_list;
227         struct l2tp_session *session;
228
229         session_list = l2tp_session_id_hash_2(l2tp_pernet(net), session_id);
230
231         rcu_read_lock_bh();
232         hlist_for_each_entry_rcu(session, session_list, global_hlist)
233                 if (session->session_id == session_id) {
234                         l2tp_session_inc_refcount(session);
235                         rcu_read_unlock_bh();
236
237                         return session;
238                 }
239         rcu_read_unlock_bh();
240
241         return NULL;
242 }
243 EXPORT_SYMBOL_GPL(l2tp_session_get);
244
245 struct l2tp_session *l2tp_session_get_nth(struct l2tp_tunnel *tunnel, int nth)
246 {
247         int hash;
248         struct l2tp_session *session;
249         int count = 0;
250
251         read_lock_bh(&tunnel->hlist_lock);
252         for (hash = 0; hash < L2TP_HASH_SIZE; hash++) {
253                 hlist_for_each_entry(session, &tunnel->session_hlist[hash], hlist) {
254                         if (++count > nth) {
255                                 l2tp_session_inc_refcount(session);
256                                 read_unlock_bh(&tunnel->hlist_lock);
257                                 return session;
258                         }
259                 }
260         }
261
262         read_unlock_bh(&tunnel->hlist_lock);
263
264         return NULL;
265 }
266 EXPORT_SYMBOL_GPL(l2tp_session_get_nth);
267
268 /* Lookup a session by interface name.
269  * This is very inefficient but is only used by management interfaces.
270  */
271 struct l2tp_session *l2tp_session_get_by_ifname(const struct net *net,
272                                                 const char *ifname)
273 {
274         struct l2tp_net *pn = l2tp_pernet(net);
275         int hash;
276         struct l2tp_session *session;
277
278         rcu_read_lock_bh();
279         for (hash = 0; hash < L2TP_HASH_SIZE_2; hash++) {
280                 hlist_for_each_entry_rcu(session, &pn->l2tp_session_hlist[hash], global_hlist) {
281                         if (!strcmp(session->ifname, ifname)) {
282                                 l2tp_session_inc_refcount(session);
283                                 rcu_read_unlock_bh();
284
285                                 return session;
286                         }
287                 }
288         }
289
290         rcu_read_unlock_bh();
291
292         return NULL;
293 }
294 EXPORT_SYMBOL_GPL(l2tp_session_get_by_ifname);
295
296 int l2tp_session_register(struct l2tp_session *session,
297                           struct l2tp_tunnel *tunnel)
298 {
299         struct l2tp_session *session_walk;
300         struct hlist_head *g_head;
301         struct hlist_head *head;
302         struct l2tp_net *pn;
303         int err;
304
305         head = l2tp_session_id_hash(tunnel, session->session_id);
306
307         write_lock_bh(&tunnel->hlist_lock);
308         if (!tunnel->acpt_newsess) {
309                 err = -ENODEV;
310                 goto err_tlock;
311         }
312
313         hlist_for_each_entry(session_walk, head, hlist)
314                 if (session_walk->session_id == session->session_id) {
315                         err = -EEXIST;
316                         goto err_tlock;
317                 }
318
319         if (tunnel->version == L2TP_HDR_VER_3) {
320                 pn = l2tp_pernet(tunnel->l2tp_net);
321                 g_head = l2tp_session_id_hash_2(pn, session->session_id);
322
323                 spin_lock_bh(&pn->l2tp_session_hlist_lock);
324
325                 /* IP encap expects session IDs to be globally unique, while
326                  * UDP encap doesn't.
327                  */
328                 hlist_for_each_entry(session_walk, g_head, global_hlist)
329                         if (session_walk->session_id == session->session_id &&
330                             (session_walk->tunnel->encap == L2TP_ENCAPTYPE_IP ||
331                              tunnel->encap == L2TP_ENCAPTYPE_IP)) {
332                                 err = -EEXIST;
333                                 goto err_tlock_pnlock;
334                         }
335
336                 l2tp_tunnel_inc_refcount(tunnel);
337                 hlist_add_head_rcu(&session->global_hlist, g_head);
338
339                 spin_unlock_bh(&pn->l2tp_session_hlist_lock);
340         } else {
341                 l2tp_tunnel_inc_refcount(tunnel);
342         }
343
344         hlist_add_head(&session->hlist, head);
345         write_unlock_bh(&tunnel->hlist_lock);
346
347         return 0;
348
349 err_tlock_pnlock:
350         spin_unlock_bh(&pn->l2tp_session_hlist_lock);
351 err_tlock:
352         write_unlock_bh(&tunnel->hlist_lock);
353
354         return err;
355 }
356 EXPORT_SYMBOL_GPL(l2tp_session_register);
357
358 /*****************************************************************************
359  * Receive data handling
360  *****************************************************************************/
361
362 /* Queue a skb in order. We come here only if the skb has an L2TP sequence
363  * number.
364  */
365 static void l2tp_recv_queue_skb(struct l2tp_session *session, struct sk_buff *skb)
366 {
367         struct sk_buff *skbp;
368         struct sk_buff *tmp;
369         u32 ns = L2TP_SKB_CB(skb)->ns;
370
371         spin_lock_bh(&session->reorder_q.lock);
372         skb_queue_walk_safe(&session->reorder_q, skbp, tmp) {
373                 if (L2TP_SKB_CB(skbp)->ns > ns) {
374                         __skb_queue_before(&session->reorder_q, skbp, skb);
375                         l2tp_dbg(session, L2TP_MSG_SEQ,
376                                  "%s: pkt %hu, inserted before %hu, reorder_q len=%d\n",
377                                  session->name, ns, L2TP_SKB_CB(skbp)->ns,
378                                  skb_queue_len(&session->reorder_q));
379                         atomic_long_inc(&session->stats.rx_oos_packets);
380                         goto out;
381                 }
382         }
383
384         __skb_queue_tail(&session->reorder_q, skb);
385
386 out:
387         spin_unlock_bh(&session->reorder_q.lock);
388 }
389
390 /* Dequeue a single skb.
391  */
392 static void l2tp_recv_dequeue_skb(struct l2tp_session *session, struct sk_buff *skb)
393 {
394         struct l2tp_tunnel *tunnel = session->tunnel;
395         int length = L2TP_SKB_CB(skb)->length;
396
397         /* We're about to requeue the skb, so return resources
398          * to its current owner (a socket receive buffer).
399          */
400         skb_orphan(skb);
401
402         atomic_long_inc(&tunnel->stats.rx_packets);
403         atomic_long_add(length, &tunnel->stats.rx_bytes);
404         atomic_long_inc(&session->stats.rx_packets);
405         atomic_long_add(length, &session->stats.rx_bytes);
406
407         if (L2TP_SKB_CB(skb)->has_seq) {
408                 /* Bump our Nr */
409                 session->nr++;
410                 session->nr &= session->nr_max;
411
412                 l2tp_dbg(session, L2TP_MSG_SEQ, "%s: updated nr to %hu\n",
413                          session->name, session->nr);
414         }
415
416         /* call private receive handler */
417         if (session->recv_skb != NULL)
418                 (*session->recv_skb)(session, skb, L2TP_SKB_CB(skb)->length);
419         else
420                 kfree_skb(skb);
421 }
422
423 /* Dequeue skbs from the session's reorder_q, subject to packet order.
424  * Skbs that have been in the queue for too long are simply discarded.
425  */
426 static void l2tp_recv_dequeue(struct l2tp_session *session)
427 {
428         struct sk_buff *skb;
429         struct sk_buff *tmp;
430
431         /* If the pkt at the head of the queue has the nr that we
432          * expect to send up next, dequeue it and any other
433          * in-sequence packets behind it.
434          */
435 start:
436         spin_lock_bh(&session->reorder_q.lock);
437         skb_queue_walk_safe(&session->reorder_q, skb, tmp) {
438                 if (time_after(jiffies, L2TP_SKB_CB(skb)->expires)) {
439                         atomic_long_inc(&session->stats.rx_seq_discards);
440                         atomic_long_inc(&session->stats.rx_errors);
441                         l2tp_dbg(session, L2TP_MSG_SEQ,
442                                  "%s: oos pkt %u len %d discarded (too old), waiting for %u, reorder_q_len=%d\n",
443                                  session->name, L2TP_SKB_CB(skb)->ns,
444                                  L2TP_SKB_CB(skb)->length, session->nr,
445                                  skb_queue_len(&session->reorder_q));
446                         session->reorder_skip = 1;
447                         __skb_unlink(skb, &session->reorder_q);
448                         kfree_skb(skb);
449                         continue;
450                 }
451
452                 if (L2TP_SKB_CB(skb)->has_seq) {
453                         if (session->reorder_skip) {
454                                 l2tp_dbg(session, L2TP_MSG_SEQ,
455                                          "%s: advancing nr to next pkt: %u -> %u",
456                                          session->name, session->nr,
457                                          L2TP_SKB_CB(skb)->ns);
458                                 session->reorder_skip = 0;
459                                 session->nr = L2TP_SKB_CB(skb)->ns;
460                         }
461                         if (L2TP_SKB_CB(skb)->ns != session->nr) {
462                                 l2tp_dbg(session, L2TP_MSG_SEQ,
463                                          "%s: holding oos pkt %u len %d, waiting for %u, reorder_q_len=%d\n",
464                                          session->name, L2TP_SKB_CB(skb)->ns,
465                                          L2TP_SKB_CB(skb)->length, session->nr,
466                                          skb_queue_len(&session->reorder_q));
467                                 goto out;
468                         }
469                 }
470                 __skb_unlink(skb, &session->reorder_q);
471
472                 /* Process the skb. We release the queue lock while we
473                  * do so to let other contexts process the queue.
474                  */
475                 spin_unlock_bh(&session->reorder_q.lock);
476                 l2tp_recv_dequeue_skb(session, skb);
477                 goto start;
478         }
479
480 out:
481         spin_unlock_bh(&session->reorder_q.lock);
482 }
483
484 static int l2tp_seq_check_rx_window(struct l2tp_session *session, u32 nr)
485 {
486         u32 nws;
487
488         if (nr >= session->nr)
489                 nws = nr - session->nr;
490         else
491                 nws = (session->nr_max + 1) - (session->nr - nr);
492
493         return nws < session->nr_window_size;
494 }
495
496 /* If packet has sequence numbers, queue it if acceptable. Returns 0 if
497  * acceptable, else non-zero.
498  */
499 static int l2tp_recv_data_seq(struct l2tp_session *session, struct sk_buff *skb)
500 {
501         if (!l2tp_seq_check_rx_window(session, L2TP_SKB_CB(skb)->ns)) {
502                 /* Packet sequence number is outside allowed window.
503                  * Discard it.
504                  */
505                 l2tp_dbg(session, L2TP_MSG_SEQ,
506                          "%s: pkt %u len %d discarded, outside window, nr=%u\n",
507                          session->name, L2TP_SKB_CB(skb)->ns,
508                          L2TP_SKB_CB(skb)->length, session->nr);
509                 goto discard;
510         }
511
512         if (session->reorder_timeout != 0) {
513                 /* Packet reordering enabled. Add skb to session's
514                  * reorder queue, in order of ns.
515                  */
516                 l2tp_recv_queue_skb(session, skb);
517                 goto out;
518         }
519
520         /* Packet reordering disabled. Discard out-of-sequence packets, while
521          * tracking the number if in-sequence packets after the first OOS packet
522          * is seen. After nr_oos_count_max in-sequence packets, reset the
523          * sequence number to re-enable packet reception.
524          */
525         if (L2TP_SKB_CB(skb)->ns == session->nr) {
526                 skb_queue_tail(&session->reorder_q, skb);
527         } else {
528                 u32 nr_oos = L2TP_SKB_CB(skb)->ns;
529                 u32 nr_next = (session->nr_oos + 1) & session->nr_max;
530
531                 if (nr_oos == nr_next)
532                         session->nr_oos_count++;
533                 else
534                         session->nr_oos_count = 0;
535
536                 session->nr_oos = nr_oos;
537                 if (session->nr_oos_count > session->nr_oos_count_max) {
538                         session->reorder_skip = 1;
539                         l2tp_dbg(session, L2TP_MSG_SEQ,
540                                  "%s: %d oos packets received. Resetting sequence numbers\n",
541                                  session->name, session->nr_oos_count);
542                 }
543                 if (!session->reorder_skip) {
544                         atomic_long_inc(&session->stats.rx_seq_discards);
545                         l2tp_dbg(session, L2TP_MSG_SEQ,
546                                  "%s: oos pkt %u len %d discarded, waiting for %u, reorder_q_len=%d\n",
547                                  session->name, L2TP_SKB_CB(skb)->ns,
548                                  L2TP_SKB_CB(skb)->length, session->nr,
549                                  skb_queue_len(&session->reorder_q));
550                         goto discard;
551                 }
552                 skb_queue_tail(&session->reorder_q, skb);
553         }
554
555 out:
556         return 0;
557
558 discard:
559         return 1;
560 }
561
562 /* Do receive processing of L2TP data frames. We handle both L2TPv2
563  * and L2TPv3 data frames here.
564  *
565  * L2TPv2 Data Message Header
566  *
567  *  0                   1                   2                   3
568  *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
569  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
570  * |T|L|x|x|S|x|O|P|x|x|x|x|  Ver  |          Length (opt)         |
571  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
572  * |           Tunnel ID           |           Session ID          |
573  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
574  * |             Ns (opt)          |             Nr (opt)          |
575  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
576  * |      Offset Size (opt)        |    Offset pad... (opt)
577  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
578  *
579  * Data frames are marked by T=0. All other fields are the same as
580  * those in L2TP control frames.
581  *
582  * L2TPv3 Data Message Header
583  *
584  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
585  * |                      L2TP Session Header                      |
586  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
587  * |                      L2-Specific Sublayer                     |
588  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
589  * |                        Tunnel Payload                      ...
590  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
591  *
592  * L2TPv3 Session Header Over IP
593  *
594  *  0                   1                   2                   3
595  *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
596  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
597  * |                           Session ID                          |
598  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
599  * |               Cookie (optional, maximum 64 bits)...
600  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
601  *                                                                 |
602  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
603  *
604  * L2TPv3 L2-Specific Sublayer Format
605  *
606  *  0                   1                   2                   3
607  *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
608  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
609  * |x|S|x|x|x|x|x|x|              Sequence Number                  |
610  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
611  *
612  * Cookie value and sublayer format are negotiated with the peer when
613  * the session is set up. Unlike L2TPv2, we do not need to parse the
614  * packet header to determine if optional fields are present.
615  *
616  * Caller must already have parsed the frame and determined that it is
617  * a data (not control) frame before coming here. Fields up to the
618  * session-id have already been parsed and ptr points to the data
619  * after the session-id.
620  */
621 void l2tp_recv_common(struct l2tp_session *session, struct sk_buff *skb,
622                       unsigned char *ptr, unsigned char *optr, u16 hdrflags,
623                       int length)
624 {
625         struct l2tp_tunnel *tunnel = session->tunnel;
626         int offset;
627         u32 ns, nr;
628
629         /* Parse and check optional cookie */
630         if (session->peer_cookie_len > 0) {
631                 if (memcmp(ptr, &session->peer_cookie[0], session->peer_cookie_len)) {
632                         l2tp_info(tunnel, L2TP_MSG_DATA,
633                                   "%s: cookie mismatch (%u/%u). Discarding.\n",
634                                   tunnel->name, tunnel->tunnel_id,
635                                   session->session_id);
636                         atomic_long_inc(&session->stats.rx_cookie_discards);
637                         goto discard;
638                 }
639                 ptr += session->peer_cookie_len;
640         }
641
642         /* Handle the optional sequence numbers. Sequence numbers are
643          * in different places for L2TPv2 and L2TPv3.
644          *
645          * If we are the LAC, enable/disable sequence numbers under
646          * the control of the LNS.  If no sequence numbers present but
647          * we were expecting them, discard frame.
648          */
649         ns = nr = 0;
650         L2TP_SKB_CB(skb)->has_seq = 0;
651         if (tunnel->version == L2TP_HDR_VER_2) {
652                 if (hdrflags & L2TP_HDRFLAG_S) {
653                         ns = ntohs(*(__be16 *) ptr);
654                         ptr += 2;
655                         nr = ntohs(*(__be16 *) ptr);
656                         ptr += 2;
657
658                         /* Store L2TP info in the skb */
659                         L2TP_SKB_CB(skb)->ns = ns;
660                         L2TP_SKB_CB(skb)->has_seq = 1;
661
662                         l2tp_dbg(session, L2TP_MSG_SEQ,
663                                  "%s: recv data ns=%u, nr=%u, session nr=%u\n",
664                                  session->name, ns, nr, session->nr);
665                 }
666         } else if (session->l2specific_type == L2TP_L2SPECTYPE_DEFAULT) {
667                 u32 l2h = ntohl(*(__be32 *) ptr);
668
669                 if (l2h & 0x40000000) {
670                         ns = l2h & 0x00ffffff;
671
672                         /* Store L2TP info in the skb */
673                         L2TP_SKB_CB(skb)->ns = ns;
674                         L2TP_SKB_CB(skb)->has_seq = 1;
675
676                         l2tp_dbg(session, L2TP_MSG_SEQ,
677                                  "%s: recv data ns=%u, session nr=%u\n",
678                                  session->name, ns, session->nr);
679                 }
680                 ptr += 4;
681         }
682
683         if (L2TP_SKB_CB(skb)->has_seq) {
684                 /* Received a packet with sequence numbers. If we're the LNS,
685                  * check if we sre sending sequence numbers and if not,
686                  * configure it so.
687                  */
688                 if ((!session->lns_mode) && (!session->send_seq)) {
689                         l2tp_info(session, L2TP_MSG_SEQ,
690                                   "%s: requested to enable seq numbers by LNS\n",
691                                   session->name);
692                         session->send_seq = 1;
693                         l2tp_session_set_header_len(session, tunnel->version);
694                 }
695         } else {
696                 /* No sequence numbers.
697                  * If user has configured mandatory sequence numbers, discard.
698                  */
699                 if (session->recv_seq) {
700                         l2tp_warn(session, L2TP_MSG_SEQ,
701                                   "%s: recv data has no seq numbers when required. Discarding.\n",
702                                   session->name);
703                         atomic_long_inc(&session->stats.rx_seq_discards);
704                         goto discard;
705                 }
706
707                 /* If we're the LAC and we're sending sequence numbers, the
708                  * LNS has requested that we no longer send sequence numbers.
709                  * If we're the LNS and we're sending sequence numbers, the
710                  * LAC is broken. Discard the frame.
711                  */
712                 if ((!session->lns_mode) && (session->send_seq)) {
713                         l2tp_info(session, L2TP_MSG_SEQ,
714                                   "%s: requested to disable seq numbers by LNS\n",
715                                   session->name);
716                         session->send_seq = 0;
717                         l2tp_session_set_header_len(session, tunnel->version);
718                 } else if (session->send_seq) {
719                         l2tp_warn(session, L2TP_MSG_SEQ,
720                                   "%s: recv data has no seq numbers when required. Discarding.\n",
721                                   session->name);
722                         atomic_long_inc(&session->stats.rx_seq_discards);
723                         goto discard;
724                 }
725         }
726
727         /* Session data offset is defined only for L2TPv2 and is
728          * indicated by an optional 16-bit value in the header.
729          */
730         if (tunnel->version == L2TP_HDR_VER_2) {
731                 /* If offset bit set, skip it. */
732                 if (hdrflags & L2TP_HDRFLAG_O) {
733                         offset = ntohs(*(__be16 *)ptr);
734                         ptr += 2 + offset;
735                 }
736         }
737
738         offset = ptr - optr;
739         if (!pskb_may_pull(skb, offset))
740                 goto discard;
741
742         __skb_pull(skb, offset);
743
744         /* Prepare skb for adding to the session's reorder_q.  Hold
745          * packets for max reorder_timeout or 1 second if not
746          * reordering.
747          */
748         L2TP_SKB_CB(skb)->length = length;
749         L2TP_SKB_CB(skb)->expires = jiffies +
750                 (session->reorder_timeout ? session->reorder_timeout : HZ);
751
752         /* Add packet to the session's receive queue. Reordering is done here, if
753          * enabled. Saved L2TP protocol info is stored in skb->sb[].
754          */
755         if (L2TP_SKB_CB(skb)->has_seq) {
756                 if (l2tp_recv_data_seq(session, skb))
757                         goto discard;
758         } else {
759                 /* No sequence numbers. Add the skb to the tail of the
760                  * reorder queue. This ensures that it will be
761                  * delivered after all previous sequenced skbs.
762                  */
763                 skb_queue_tail(&session->reorder_q, skb);
764         }
765
766         /* Try to dequeue as many skbs from reorder_q as we can. */
767         l2tp_recv_dequeue(session);
768
769         return;
770
771 discard:
772         atomic_long_inc(&session->stats.rx_errors);
773         kfree_skb(skb);
774 }
775 EXPORT_SYMBOL(l2tp_recv_common);
776
777 /* Drop skbs from the session's reorder_q
778  */
779 static int l2tp_session_queue_purge(struct l2tp_session *session)
780 {
781         struct sk_buff *skb = NULL;
782         BUG_ON(!session);
783         BUG_ON(session->magic != L2TP_SESSION_MAGIC);
784         while ((skb = skb_dequeue(&session->reorder_q))) {
785                 atomic_long_inc(&session->stats.rx_errors);
786                 kfree_skb(skb);
787         }
788         return 0;
789 }
790
791 /* Internal UDP receive frame. Do the real work of receiving an L2TP data frame
792  * here. The skb is not on a list when we get here.
793  * Returns 0 if the packet was a data packet and was successfully passed on.
794  * Returns 1 if the packet was not a good data packet and could not be
795  * forwarded.  All such packets are passed up to userspace to deal with.
796  */
797 static int l2tp_udp_recv_core(struct l2tp_tunnel *tunnel, struct sk_buff *skb)
798 {
799         struct l2tp_session *session = NULL;
800         unsigned char *ptr, *optr;
801         u16 hdrflags;
802         u32 tunnel_id, session_id;
803         u16 version;
804         int length;
805
806         /* UDP has verifed checksum */
807
808         /* UDP always verifies the packet length. */
809         __skb_pull(skb, sizeof(struct udphdr));
810
811         /* Short packet? */
812         if (!pskb_may_pull(skb, L2TP_HDR_SIZE_MAX)) {
813                 l2tp_info(tunnel, L2TP_MSG_DATA,
814                           "%s: recv short packet (len=%d)\n",
815                           tunnel->name, skb->len);
816                 goto error;
817         }
818
819         /* Trace packet contents, if enabled */
820         if (tunnel->debug & L2TP_MSG_DATA) {
821                 length = min(32u, skb->len);
822                 if (!pskb_may_pull(skb, length))
823                         goto error;
824
825                 pr_debug("%s: recv\n", tunnel->name);
826                 print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, skb->data, length);
827         }
828
829         /* Point to L2TP header */
830         optr = ptr = skb->data;
831
832         /* Get L2TP header flags */
833         hdrflags = ntohs(*(__be16 *) ptr);
834
835         /* Check protocol version */
836         version = hdrflags & L2TP_HDR_VER_MASK;
837         if (version != tunnel->version) {
838                 l2tp_info(tunnel, L2TP_MSG_DATA,
839                           "%s: recv protocol version mismatch: got %d expected %d\n",
840                           tunnel->name, version, tunnel->version);
841                 goto error;
842         }
843
844         /* Get length of L2TP packet */
845         length = skb->len;
846
847         /* If type is control packet, it is handled by userspace. */
848         if (hdrflags & L2TP_HDRFLAG_T) {
849                 l2tp_dbg(tunnel, L2TP_MSG_DATA,
850                          "%s: recv control packet, len=%d\n",
851                          tunnel->name, length);
852                 goto error;
853         }
854
855         /* Skip flags */
856         ptr += 2;
857
858         if (tunnel->version == L2TP_HDR_VER_2) {
859                 /* If length is present, skip it */
860                 if (hdrflags & L2TP_HDRFLAG_L)
861                         ptr += 2;
862
863                 /* Extract tunnel and session ID */
864                 tunnel_id = ntohs(*(__be16 *) ptr);
865                 ptr += 2;
866                 session_id = ntohs(*(__be16 *) ptr);
867                 ptr += 2;
868         } else {
869                 ptr += 2;       /* skip reserved bits */
870                 tunnel_id = tunnel->tunnel_id;
871                 session_id = ntohl(*(__be32 *) ptr);
872                 ptr += 4;
873         }
874
875         /* Find the session context */
876         session = l2tp_tunnel_get_session(tunnel, session_id);
877         if (!session || !session->recv_skb) {
878                 if (session)
879                         l2tp_session_dec_refcount(session);
880
881                 /* Not found? Pass to userspace to deal with */
882                 l2tp_info(tunnel, L2TP_MSG_DATA,
883                           "%s: no session found (%u/%u). Passing up.\n",
884                           tunnel->name, tunnel_id, session_id);
885                 goto error;
886         }
887
888         if (tunnel->version == L2TP_HDR_VER_3 &&
889             l2tp_v3_ensure_opt_in_linear(session, skb, &ptr, &optr)) {
890                 l2tp_session_dec_refcount(session);
891                 goto error;
892         }
893
894         l2tp_recv_common(session, skb, ptr, optr, hdrflags, length);
895         l2tp_session_dec_refcount(session);
896
897         return 0;
898
899 error:
900         /* Put UDP header back */
901         __skb_push(skb, sizeof(struct udphdr));
902
903         return 1;
904 }
905
906 /* UDP encapsulation receive handler. See net/ipv4/udp.c.
907  * Return codes:
908  * 0 : success.
909  * <0: error
910  * >0: skb should be passed up to userspace as UDP.
911  */
912 int l2tp_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
913 {
914         struct l2tp_tunnel *tunnel;
915
916         tunnel = rcu_dereference_sk_user_data(sk);
917         if (tunnel == NULL)
918                 goto pass_up;
919
920         l2tp_dbg(tunnel, L2TP_MSG_DATA, "%s: received %d bytes\n",
921                  tunnel->name, skb->len);
922
923         if (l2tp_udp_recv_core(tunnel, skb))
924                 goto pass_up;
925
926         return 0;
927
928 pass_up:
929         return 1;
930 }
931 EXPORT_SYMBOL_GPL(l2tp_udp_encap_recv);
932
933 /************************************************************************
934  * Transmit handling
935  ***********************************************************************/
936
937 /* Build an L2TP header for the session into the buffer provided.
938  */
939 static int l2tp_build_l2tpv2_header(struct l2tp_session *session, void *buf)
940 {
941         struct l2tp_tunnel *tunnel = session->tunnel;
942         __be16 *bufp = buf;
943         __be16 *optr = buf;
944         u16 flags = L2TP_HDR_VER_2;
945         u32 tunnel_id = tunnel->peer_tunnel_id;
946         u32 session_id = session->peer_session_id;
947
948         if (session->send_seq)
949                 flags |= L2TP_HDRFLAG_S;
950
951         /* Setup L2TP header. */
952         *bufp++ = htons(flags);
953         *bufp++ = htons(tunnel_id);
954         *bufp++ = htons(session_id);
955         if (session->send_seq) {
956                 *bufp++ = htons(session->ns);
957                 *bufp++ = 0;
958                 session->ns++;
959                 session->ns &= 0xffff;
960                 l2tp_dbg(session, L2TP_MSG_SEQ, "%s: updated ns to %u\n",
961                          session->name, session->ns);
962         }
963
964         return bufp - optr;
965 }
966
967 static int l2tp_build_l2tpv3_header(struct l2tp_session *session, void *buf)
968 {
969         struct l2tp_tunnel *tunnel = session->tunnel;
970         char *bufp = buf;
971         char *optr = bufp;
972
973         /* Setup L2TP header. The header differs slightly for UDP and
974          * IP encapsulations. For UDP, there is 4 bytes of flags.
975          */
976         if (tunnel->encap == L2TP_ENCAPTYPE_UDP) {
977                 u16 flags = L2TP_HDR_VER_3;
978                 *((__be16 *) bufp) = htons(flags);
979                 bufp += 2;
980                 *((__be16 *) bufp) = 0;
981                 bufp += 2;
982         }
983
984         *((__be32 *) bufp) = htonl(session->peer_session_id);
985         bufp += 4;
986         if (session->cookie_len) {
987                 memcpy(bufp, &session->cookie[0], session->cookie_len);
988                 bufp += session->cookie_len;
989         }
990         if (session->l2specific_type == L2TP_L2SPECTYPE_DEFAULT) {
991                 u32 l2h = 0;
992
993                 if (session->send_seq) {
994                         l2h = 0x40000000 | session->ns;
995                         session->ns++;
996                         session->ns &= 0xffffff;
997                         l2tp_dbg(session, L2TP_MSG_SEQ,
998                                  "%s: updated ns to %u\n",
999                                  session->name, session->ns);
1000                 }
1001
1002                 *((__be32 *)bufp) = htonl(l2h);
1003                 bufp += 4;
1004         }
1005
1006         return bufp - optr;
1007 }
1008
1009 static void l2tp_xmit_core(struct l2tp_session *session, struct sk_buff *skb,
1010                            struct flowi *fl, size_t data_len)
1011 {
1012         struct l2tp_tunnel *tunnel = session->tunnel;
1013         unsigned int len = skb->len;
1014         int error;
1015
1016         /* Debug */
1017         if (session->send_seq)
1018                 l2tp_dbg(session, L2TP_MSG_DATA, "%s: send %zd bytes, ns=%u\n",
1019                          session->name, data_len, session->ns - 1);
1020         else
1021                 l2tp_dbg(session, L2TP_MSG_DATA, "%s: send %zd bytes\n",
1022                          session->name, data_len);
1023
1024         if (session->debug & L2TP_MSG_DATA) {
1025                 int uhlen = (tunnel->encap == L2TP_ENCAPTYPE_UDP) ? sizeof(struct udphdr) : 0;
1026                 unsigned char *datap = skb->data + uhlen;
1027
1028                 pr_debug("%s: xmit\n", session->name);
1029                 print_hex_dump_bytes("", DUMP_PREFIX_OFFSET,
1030                                      datap, min_t(size_t, 32, len - uhlen));
1031         }
1032
1033         /* Queue the packet to IP for output */
1034         skb->ignore_df = 1;
1035         skb_dst_drop(skb);
1036 #if IS_ENABLED(CONFIG_IPV6)
1037         if (l2tp_sk_is_v6(tunnel->sock))
1038                 error = inet6_csk_xmit(tunnel->sock, skb, NULL);
1039         else
1040 #endif
1041                 error = ip_queue_xmit(tunnel->sock, skb, fl);
1042
1043         /* Update stats */
1044         if (error >= 0) {
1045                 atomic_long_inc(&tunnel->stats.tx_packets);
1046                 atomic_long_add(len, &tunnel->stats.tx_bytes);
1047                 atomic_long_inc(&session->stats.tx_packets);
1048                 atomic_long_add(len, &session->stats.tx_bytes);
1049         } else {
1050                 atomic_long_inc(&tunnel->stats.tx_errors);
1051                 atomic_long_inc(&session->stats.tx_errors);
1052         }
1053 }
1054
1055 /* If caller requires the skb to have a ppp header, the header must be
1056  * inserted in the skb data before calling this function.
1057  */
1058 int l2tp_xmit_skb(struct l2tp_session *session, struct sk_buff *skb, int hdr_len)
1059 {
1060         int data_len = skb->len;
1061         struct l2tp_tunnel *tunnel = session->tunnel;
1062         struct sock *sk = tunnel->sock;
1063         struct flowi *fl;
1064         struct udphdr *uh;
1065         struct inet_sock *inet;
1066         int headroom;
1067         int uhlen = (tunnel->encap == L2TP_ENCAPTYPE_UDP) ? sizeof(struct udphdr) : 0;
1068         int udp_len;
1069         int ret = NET_XMIT_SUCCESS;
1070
1071         /* Check that there's enough headroom in the skb to insert IP,
1072          * UDP and L2TP headers. If not enough, expand it to
1073          * make room. Adjust truesize.
1074          */
1075         headroom = NET_SKB_PAD + sizeof(struct iphdr) +
1076                 uhlen + hdr_len;
1077         if (skb_cow_head(skb, headroom)) {
1078                 kfree_skb(skb);
1079                 return NET_XMIT_DROP;
1080         }
1081
1082         /* Setup L2TP header */
1083         session->build_header(session, __skb_push(skb, hdr_len));
1084
1085         /* Reset skb netfilter state */
1086         memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
1087         IPCB(skb)->flags &= ~(IPSKB_XFRM_TUNNEL_SIZE | IPSKB_XFRM_TRANSFORMED |
1088                               IPSKB_REROUTED);
1089         nf_reset_ct(skb);
1090
1091         bh_lock_sock(sk);
1092         if (sock_owned_by_user(sk)) {
1093                 kfree_skb(skb);
1094                 ret = NET_XMIT_DROP;
1095                 goto out_unlock;
1096         }
1097
1098         /* The user-space may change the connection status for the user-space
1099          * provided socket at run time: we must check it under the socket lock
1100          */
1101         if (tunnel->fd >= 0 && sk->sk_state != TCP_ESTABLISHED) {
1102                 kfree_skb(skb);
1103                 ret = NET_XMIT_DROP;
1104                 goto out_unlock;
1105         }
1106
1107         inet = inet_sk(sk);
1108         fl = &inet->cork.fl;
1109         switch (tunnel->encap) {
1110         case L2TP_ENCAPTYPE_UDP:
1111                 /* Setup UDP header */
1112                 __skb_push(skb, sizeof(*uh));
1113                 skb_reset_transport_header(skb);
1114                 uh = udp_hdr(skb);
1115                 uh->source = inet->inet_sport;
1116                 uh->dest = inet->inet_dport;
1117                 udp_len = uhlen + hdr_len + data_len;
1118                 uh->len = htons(udp_len);
1119
1120                 /* Calculate UDP checksum if configured to do so */
1121 #if IS_ENABLED(CONFIG_IPV6)
1122                 if (l2tp_sk_is_v6(sk))
1123                         udp6_set_csum(udp_get_no_check6_tx(sk),
1124                                       skb, &inet6_sk(sk)->saddr,
1125                                       &sk->sk_v6_daddr, udp_len);
1126                 else
1127 #endif
1128                 udp_set_csum(sk->sk_no_check_tx, skb, inet->inet_saddr,
1129                              inet->inet_daddr, udp_len);
1130                 break;
1131
1132         case L2TP_ENCAPTYPE_IP:
1133                 break;
1134         }
1135
1136         l2tp_xmit_core(session, skb, fl, data_len);
1137 out_unlock:
1138         bh_unlock_sock(sk);
1139
1140         return ret;
1141 }
1142 EXPORT_SYMBOL_GPL(l2tp_xmit_skb);
1143
1144 /*****************************************************************************
1145  * Tinnel and session create/destroy.
1146  *****************************************************************************/
1147
1148 /* Tunnel socket destruct hook.
1149  * The tunnel context is deleted only when all session sockets have been
1150  * closed.
1151  */
1152 static void l2tp_tunnel_destruct(struct sock *sk)
1153 {
1154         struct l2tp_tunnel *tunnel = l2tp_tunnel(sk);
1155
1156         if (tunnel == NULL)
1157                 goto end;
1158
1159         l2tp_info(tunnel, L2TP_MSG_CONTROL, "%s: closing...\n", tunnel->name);
1160
1161         /* Disable udp encapsulation */
1162         switch (tunnel->encap) {
1163         case L2TP_ENCAPTYPE_UDP:
1164                 /* No longer an encapsulation socket. See net/ipv4/udp.c */
1165                 (udp_sk(sk))->encap_type = 0;
1166                 (udp_sk(sk))->encap_rcv = NULL;
1167                 (udp_sk(sk))->encap_destroy = NULL;
1168                 break;
1169         case L2TP_ENCAPTYPE_IP:
1170                 break;
1171         }
1172
1173         /* Remove hooks into tunnel socket */
1174         sk->sk_destruct = tunnel->old_sk_destruct;
1175         sk->sk_user_data = NULL;
1176
1177         /* Call the original destructor */
1178         if (sk->sk_destruct)
1179                 (*sk->sk_destruct)(sk);
1180
1181         kfree_rcu(tunnel, rcu);
1182 end:
1183         return;
1184 }
1185
1186 /* When the tunnel is closed, all the attached sessions need to go too.
1187  */
1188 static void l2tp_tunnel_closeall(struct l2tp_tunnel *tunnel)
1189 {
1190         int hash;
1191         struct hlist_node *walk;
1192         struct hlist_node *tmp;
1193         struct l2tp_session *session;
1194
1195         BUG_ON(tunnel == NULL);
1196
1197         l2tp_info(tunnel, L2TP_MSG_CONTROL, "%s: closing all sessions...\n",
1198                   tunnel->name);
1199
1200         write_lock_bh(&tunnel->hlist_lock);
1201         tunnel->acpt_newsess = false;
1202         for (hash = 0; hash < L2TP_HASH_SIZE; hash++) {
1203 again:
1204                 hlist_for_each_safe(walk, tmp, &tunnel->session_hlist[hash]) {
1205                         session = hlist_entry(walk, struct l2tp_session, hlist);
1206
1207                         l2tp_info(session, L2TP_MSG_CONTROL,
1208                                   "%s: closing session\n", session->name);
1209
1210                         hlist_del_init(&session->hlist);
1211
1212                         if (test_and_set_bit(0, &session->dead))
1213                                 goto again;
1214
1215                         write_unlock_bh(&tunnel->hlist_lock);
1216
1217                         __l2tp_session_unhash(session);
1218                         l2tp_session_queue_purge(session);
1219
1220                         if (session->session_close != NULL)
1221                                 (*session->session_close)(session);
1222
1223                         l2tp_session_dec_refcount(session);
1224
1225                         write_lock_bh(&tunnel->hlist_lock);
1226
1227                         /* Now restart from the beginning of this hash
1228                          * chain.  We always remove a session from the
1229                          * list so we are guaranteed to make forward
1230                          * progress.
1231                          */
1232                         goto again;
1233                 }
1234         }
1235         write_unlock_bh(&tunnel->hlist_lock);
1236 }
1237
1238 /* Tunnel socket destroy hook for UDP encapsulation */
1239 static void l2tp_udp_encap_destroy(struct sock *sk)
1240 {
1241         struct l2tp_tunnel *tunnel = l2tp_tunnel(sk);
1242
1243         if (tunnel)
1244                 l2tp_tunnel_delete(tunnel);
1245 }
1246
1247 /* Workqueue tunnel deletion function */
1248 static void l2tp_tunnel_del_work(struct work_struct *work)
1249 {
1250         struct l2tp_tunnel *tunnel = container_of(work, struct l2tp_tunnel,
1251                                                   del_work);
1252         struct sock *sk = tunnel->sock;
1253         struct socket *sock = sk->sk_socket;
1254         struct l2tp_net *pn;
1255
1256         l2tp_tunnel_closeall(tunnel);
1257
1258         /* If the tunnel socket was created within the kernel, use
1259          * the sk API to release it here.
1260          */
1261         if (tunnel->fd < 0) {
1262                 if (sock) {
1263                         kernel_sock_shutdown(sock, SHUT_RDWR);
1264                         sock_release(sock);
1265                 }
1266         }
1267
1268         /* Remove the tunnel struct from the tunnel list */
1269         pn = l2tp_pernet(tunnel->l2tp_net);
1270         spin_lock_bh(&pn->l2tp_tunnel_list_lock);
1271         list_del_rcu(&tunnel->list);
1272         spin_unlock_bh(&pn->l2tp_tunnel_list_lock);
1273
1274         /* drop initial ref */
1275         l2tp_tunnel_dec_refcount(tunnel);
1276
1277         /* drop workqueue ref */
1278         l2tp_tunnel_dec_refcount(tunnel);
1279 }
1280
1281 /* Create a socket for the tunnel, if one isn't set up by
1282  * userspace. This is used for static tunnels where there is no
1283  * managing L2TP daemon.
1284  *
1285  * Since we don't want these sockets to keep a namespace alive by
1286  * themselves, we drop the socket's namespace refcount after creation.
1287  * These sockets are freed when the namespace exits using the pernet
1288  * exit hook.
1289  */
1290 static int l2tp_tunnel_sock_create(struct net *net,
1291                                 u32 tunnel_id,
1292                                 u32 peer_tunnel_id,
1293                                 struct l2tp_tunnel_cfg *cfg,
1294                                 struct socket **sockp)
1295 {
1296         int err = -EINVAL;
1297         struct socket *sock = NULL;
1298         struct udp_port_cfg udp_conf;
1299
1300         switch (cfg->encap) {
1301         case L2TP_ENCAPTYPE_UDP:
1302                 memset(&udp_conf, 0, sizeof(udp_conf));
1303
1304 #if IS_ENABLED(CONFIG_IPV6)
1305                 if (cfg->local_ip6 && cfg->peer_ip6) {
1306                         udp_conf.family = AF_INET6;
1307                         memcpy(&udp_conf.local_ip6, cfg->local_ip6,
1308                                sizeof(udp_conf.local_ip6));
1309                         memcpy(&udp_conf.peer_ip6, cfg->peer_ip6,
1310                                sizeof(udp_conf.peer_ip6));
1311                         udp_conf.use_udp6_tx_checksums =
1312                           ! cfg->udp6_zero_tx_checksums;
1313                         udp_conf.use_udp6_rx_checksums =
1314                           ! cfg->udp6_zero_rx_checksums;
1315                 } else
1316 #endif
1317                 {
1318                         udp_conf.family = AF_INET;
1319                         udp_conf.local_ip = cfg->local_ip;
1320                         udp_conf.peer_ip = cfg->peer_ip;
1321                         udp_conf.use_udp_checksums = cfg->use_udp_checksums;
1322                 }
1323
1324                 udp_conf.local_udp_port = htons(cfg->local_udp_port);
1325                 udp_conf.peer_udp_port = htons(cfg->peer_udp_port);
1326
1327                 err = udp_sock_create(net, &udp_conf, &sock);
1328                 if (err < 0)
1329                         goto out;
1330
1331                 break;
1332
1333         case L2TP_ENCAPTYPE_IP:
1334 #if IS_ENABLED(CONFIG_IPV6)
1335                 if (cfg->local_ip6 && cfg->peer_ip6) {
1336                         struct sockaddr_l2tpip6 ip6_addr = {0};
1337
1338                         err = sock_create_kern(net, AF_INET6, SOCK_DGRAM,
1339                                           IPPROTO_L2TP, &sock);
1340                         if (err < 0)
1341                                 goto out;
1342
1343                         ip6_addr.l2tp_family = AF_INET6;
1344                         memcpy(&ip6_addr.l2tp_addr, cfg->local_ip6,
1345                                sizeof(ip6_addr.l2tp_addr));
1346                         ip6_addr.l2tp_conn_id = tunnel_id;
1347                         err = kernel_bind(sock, (struct sockaddr *) &ip6_addr,
1348                                           sizeof(ip6_addr));
1349                         if (err < 0)
1350                                 goto out;
1351
1352                         ip6_addr.l2tp_family = AF_INET6;
1353                         memcpy(&ip6_addr.l2tp_addr, cfg->peer_ip6,
1354                                sizeof(ip6_addr.l2tp_addr));
1355                         ip6_addr.l2tp_conn_id = peer_tunnel_id;
1356                         err = kernel_connect(sock,
1357                                              (struct sockaddr *) &ip6_addr,
1358                                              sizeof(ip6_addr), 0);
1359                         if (err < 0)
1360                                 goto out;
1361                 } else
1362 #endif
1363                 {
1364                         struct sockaddr_l2tpip ip_addr = {0};
1365
1366                         err = sock_create_kern(net, AF_INET, SOCK_DGRAM,
1367                                           IPPROTO_L2TP, &sock);
1368                         if (err < 0)
1369                                 goto out;
1370
1371                         ip_addr.l2tp_family = AF_INET;
1372                         ip_addr.l2tp_addr = cfg->local_ip;
1373                         ip_addr.l2tp_conn_id = tunnel_id;
1374                         err = kernel_bind(sock, (struct sockaddr *) &ip_addr,
1375                                           sizeof(ip_addr));
1376                         if (err < 0)
1377                                 goto out;
1378
1379                         ip_addr.l2tp_family = AF_INET;
1380                         ip_addr.l2tp_addr = cfg->peer_ip;
1381                         ip_addr.l2tp_conn_id = peer_tunnel_id;
1382                         err = kernel_connect(sock, (struct sockaddr *) &ip_addr,
1383                                              sizeof(ip_addr), 0);
1384                         if (err < 0)
1385                                 goto out;
1386                 }
1387                 break;
1388
1389         default:
1390                 goto out;
1391         }
1392
1393 out:
1394         *sockp = sock;
1395         if ((err < 0) && sock) {
1396                 kernel_sock_shutdown(sock, SHUT_RDWR);
1397                 sock_release(sock);
1398                 *sockp = NULL;
1399         }
1400
1401         return err;
1402 }
1403
1404 static struct lock_class_key l2tp_socket_class;
1405
1406 int l2tp_tunnel_create(struct net *net, int fd, int version, u32 tunnel_id, u32 peer_tunnel_id, struct l2tp_tunnel_cfg *cfg, struct l2tp_tunnel **tunnelp)
1407 {
1408         struct l2tp_tunnel *tunnel = NULL;
1409         int err;
1410         enum l2tp_encap_type encap = L2TP_ENCAPTYPE_UDP;
1411
1412         if (cfg != NULL)
1413                 encap = cfg->encap;
1414
1415         tunnel = kzalloc(sizeof(struct l2tp_tunnel), GFP_KERNEL);
1416         if (tunnel == NULL) {
1417                 err = -ENOMEM;
1418                 goto err;
1419         }
1420
1421         tunnel->version = version;
1422         tunnel->tunnel_id = tunnel_id;
1423         tunnel->peer_tunnel_id = peer_tunnel_id;
1424         tunnel->debug = L2TP_DEFAULT_DEBUG_FLAGS;
1425
1426         tunnel->magic = L2TP_TUNNEL_MAGIC;
1427         sprintf(&tunnel->name[0], "tunl %u", tunnel_id);
1428         rwlock_init(&tunnel->hlist_lock);
1429         tunnel->acpt_newsess = true;
1430
1431         if (cfg != NULL)
1432                 tunnel->debug = cfg->debug;
1433
1434         tunnel->encap = encap;
1435
1436         refcount_set(&tunnel->ref_count, 1);
1437         tunnel->fd = fd;
1438
1439         /* Init delete workqueue struct */
1440         INIT_WORK(&tunnel->del_work, l2tp_tunnel_del_work);
1441
1442         INIT_LIST_HEAD(&tunnel->list);
1443
1444         err = 0;
1445 err:
1446         if (tunnelp)
1447                 *tunnelp = tunnel;
1448
1449         return err;
1450 }
1451 EXPORT_SYMBOL_GPL(l2tp_tunnel_create);
1452
1453 static int l2tp_validate_socket(const struct sock *sk, const struct net *net,
1454                                 enum l2tp_encap_type encap)
1455 {
1456         if (!net_eq(sock_net(sk), net))
1457                 return -EINVAL;
1458
1459         if (sk->sk_type != SOCK_DGRAM)
1460                 return -EPROTONOSUPPORT;
1461
1462         if (sk->sk_family != PF_INET && sk->sk_family != PF_INET6)
1463                 return -EPROTONOSUPPORT;
1464
1465         if ((encap == L2TP_ENCAPTYPE_UDP && sk->sk_protocol != IPPROTO_UDP) ||
1466             (encap == L2TP_ENCAPTYPE_IP && sk->sk_protocol != IPPROTO_L2TP))
1467                 return -EPROTONOSUPPORT;
1468
1469         if (sk->sk_user_data)
1470                 return -EBUSY;
1471
1472         return 0;
1473 }
1474
1475 int l2tp_tunnel_register(struct l2tp_tunnel *tunnel, struct net *net,
1476                          struct l2tp_tunnel_cfg *cfg)
1477 {
1478         struct l2tp_tunnel *tunnel_walk;
1479         struct l2tp_net *pn;
1480         struct socket *sock;
1481         struct sock *sk;
1482         int ret;
1483
1484         if (tunnel->fd < 0) {
1485                 ret = l2tp_tunnel_sock_create(net, tunnel->tunnel_id,
1486                                               tunnel->peer_tunnel_id, cfg,
1487                                               &sock);
1488                 if (ret < 0)
1489                         goto err;
1490         } else {
1491                 sock = sockfd_lookup(tunnel->fd, &ret);
1492                 if (!sock)
1493                         goto err;
1494
1495                 ret = l2tp_validate_socket(sock->sk, net, tunnel->encap);
1496                 if (ret < 0)
1497                         goto err_sock;
1498         }
1499
1500         tunnel->l2tp_net = net;
1501         pn = l2tp_pernet(net);
1502
1503         spin_lock_bh(&pn->l2tp_tunnel_list_lock);
1504         list_for_each_entry(tunnel_walk, &pn->l2tp_tunnel_list, list) {
1505                 if (tunnel_walk->tunnel_id == tunnel->tunnel_id) {
1506                         spin_unlock_bh(&pn->l2tp_tunnel_list_lock);
1507
1508                         ret = -EEXIST;
1509                         goto err_sock;
1510                 }
1511         }
1512         list_add_rcu(&tunnel->list, &pn->l2tp_tunnel_list);
1513         spin_unlock_bh(&pn->l2tp_tunnel_list_lock);
1514
1515         sk = sock->sk;
1516         sock_hold(sk);
1517         tunnel->sock = sk;
1518
1519         if (tunnel->encap == L2TP_ENCAPTYPE_UDP) {
1520                 struct udp_tunnel_sock_cfg udp_cfg = {
1521                         .sk_user_data = tunnel,
1522                         .encap_type = UDP_ENCAP_L2TPINUDP,
1523                         .encap_rcv = l2tp_udp_encap_recv,
1524                         .encap_destroy = l2tp_udp_encap_destroy,
1525                 };
1526
1527                 setup_udp_tunnel_sock(net, sock, &udp_cfg);
1528         } else {
1529                 sk->sk_user_data = tunnel;
1530         }
1531
1532         tunnel->old_sk_destruct = sk->sk_destruct;
1533         sk->sk_destruct = &l2tp_tunnel_destruct;
1534         lockdep_set_class_and_name(&sk->sk_lock.slock, &l2tp_socket_class,
1535                                    "l2tp_sock");
1536         sk->sk_allocation = GFP_ATOMIC;
1537
1538         if (tunnel->fd >= 0)
1539                 sockfd_put(sock);
1540
1541         return 0;
1542
1543 err_sock:
1544         if (tunnel->fd < 0)
1545                 sock_release(sock);
1546         else
1547                 sockfd_put(sock);
1548 err:
1549         return ret;
1550 }
1551 EXPORT_SYMBOL_GPL(l2tp_tunnel_register);
1552
1553 /* This function is used by the netlink TUNNEL_DELETE command.
1554  */
1555 void l2tp_tunnel_delete(struct l2tp_tunnel *tunnel)
1556 {
1557         if (!test_and_set_bit(0, &tunnel->dead)) {
1558                 l2tp_tunnel_inc_refcount(tunnel);
1559                 queue_work(l2tp_wq, &tunnel->del_work);
1560         }
1561 }
1562 EXPORT_SYMBOL_GPL(l2tp_tunnel_delete);
1563
1564 /* Really kill the session.
1565  */
1566 void l2tp_session_free(struct l2tp_session *session)
1567 {
1568         struct l2tp_tunnel *tunnel = session->tunnel;
1569
1570         BUG_ON(refcount_read(&session->ref_count) != 0);
1571
1572         if (tunnel) {
1573                 BUG_ON(tunnel->magic != L2TP_TUNNEL_MAGIC);
1574                 l2tp_tunnel_dec_refcount(tunnel);
1575         }
1576
1577         kfree(session);
1578 }
1579 EXPORT_SYMBOL_GPL(l2tp_session_free);
1580
1581 /* Remove an l2tp session from l2tp_core's hash lists.
1582  * Provides a tidyup interface for pseudowire code which can't just route all
1583  * shutdown via. l2tp_session_delete and a pseudowire-specific session_close
1584  * callback.
1585  */
1586 void __l2tp_session_unhash(struct l2tp_session *session)
1587 {
1588         struct l2tp_tunnel *tunnel = session->tunnel;
1589
1590         /* Remove the session from core hashes */
1591         if (tunnel) {
1592                 /* Remove from the per-tunnel hash */
1593                 write_lock_bh(&tunnel->hlist_lock);
1594                 hlist_del_init(&session->hlist);
1595                 write_unlock_bh(&tunnel->hlist_lock);
1596
1597                 /* For L2TPv3 we have a per-net hash: remove from there, too */
1598                 if (tunnel->version != L2TP_HDR_VER_2) {
1599                         struct l2tp_net *pn = l2tp_pernet(tunnel->l2tp_net);
1600                         spin_lock_bh(&pn->l2tp_session_hlist_lock);
1601                         hlist_del_init_rcu(&session->global_hlist);
1602                         spin_unlock_bh(&pn->l2tp_session_hlist_lock);
1603                         synchronize_rcu();
1604                 }
1605         }
1606 }
1607 EXPORT_SYMBOL_GPL(__l2tp_session_unhash);
1608
1609 /* This function is used by the netlink SESSION_DELETE command and by
1610    pseudowire modules.
1611  */
1612 int l2tp_session_delete(struct l2tp_session *session)
1613 {
1614         if (test_and_set_bit(0, &session->dead))
1615                 return 0;
1616
1617         __l2tp_session_unhash(session);
1618         l2tp_session_queue_purge(session);
1619         if (session->session_close != NULL)
1620                 (*session->session_close)(session);
1621
1622         l2tp_session_dec_refcount(session);
1623
1624         return 0;
1625 }
1626 EXPORT_SYMBOL_GPL(l2tp_session_delete);
1627
1628 /* We come here whenever a session's send_seq, cookie_len or
1629  * l2specific_type parameters are set.
1630  */
1631 void l2tp_session_set_header_len(struct l2tp_session *session, int version)
1632 {
1633         if (version == L2TP_HDR_VER_2) {
1634                 session->hdr_len = 6;
1635                 if (session->send_seq)
1636                         session->hdr_len += 4;
1637         } else {
1638                 session->hdr_len = 4 + session->cookie_len;
1639                 session->hdr_len += l2tp_get_l2specific_len(session);
1640                 if (session->tunnel->encap == L2TP_ENCAPTYPE_UDP)
1641                         session->hdr_len += 4;
1642         }
1643
1644 }
1645 EXPORT_SYMBOL_GPL(l2tp_session_set_header_len);
1646
1647 struct l2tp_session *l2tp_session_create(int priv_size, struct l2tp_tunnel *tunnel, u32 session_id, u32 peer_session_id, struct l2tp_session_cfg *cfg)
1648 {
1649         struct l2tp_session *session;
1650
1651         session = kzalloc(sizeof(struct l2tp_session) + priv_size, GFP_KERNEL);
1652         if (session != NULL) {
1653                 session->magic = L2TP_SESSION_MAGIC;
1654                 session->tunnel = tunnel;
1655
1656                 session->session_id = session_id;
1657                 session->peer_session_id = peer_session_id;
1658                 session->nr = 0;
1659                 if (tunnel->version == L2TP_HDR_VER_2)
1660                         session->nr_max = 0xffff;
1661                 else
1662                         session->nr_max = 0xffffff;
1663                 session->nr_window_size = session->nr_max / 2;
1664                 session->nr_oos_count_max = 4;
1665
1666                 /* Use NR of first received packet */
1667                 session->reorder_skip = 1;
1668
1669                 sprintf(&session->name[0], "sess %u/%u",
1670                         tunnel->tunnel_id, session->session_id);
1671
1672                 skb_queue_head_init(&session->reorder_q);
1673
1674                 INIT_HLIST_NODE(&session->hlist);
1675                 INIT_HLIST_NODE(&session->global_hlist);
1676
1677                 /* Inherit debug options from tunnel */
1678                 session->debug = tunnel->debug;
1679
1680                 if (cfg) {
1681                         session->pwtype = cfg->pw_type;
1682                         session->debug = cfg->debug;
1683                         session->send_seq = cfg->send_seq;
1684                         session->recv_seq = cfg->recv_seq;
1685                         session->lns_mode = cfg->lns_mode;
1686                         session->reorder_timeout = cfg->reorder_timeout;
1687                         session->l2specific_type = cfg->l2specific_type;
1688                         session->cookie_len = cfg->cookie_len;
1689                         memcpy(&session->cookie[0], &cfg->cookie[0], cfg->cookie_len);
1690                         session->peer_cookie_len = cfg->peer_cookie_len;
1691                         memcpy(&session->peer_cookie[0], &cfg->peer_cookie[0], cfg->peer_cookie_len);
1692                 }
1693
1694                 if (tunnel->version == L2TP_HDR_VER_2)
1695                         session->build_header = l2tp_build_l2tpv2_header;
1696                 else
1697                         session->build_header = l2tp_build_l2tpv3_header;
1698
1699                 l2tp_session_set_header_len(session, tunnel->version);
1700
1701                 refcount_set(&session->ref_count, 1);
1702
1703                 return session;
1704         }
1705
1706         return ERR_PTR(-ENOMEM);
1707 }
1708 EXPORT_SYMBOL_GPL(l2tp_session_create);
1709
1710 /*****************************************************************************
1711  * Init and cleanup
1712  *****************************************************************************/
1713
1714 static __net_init int l2tp_init_net(struct net *net)
1715 {
1716         struct l2tp_net *pn = net_generic(net, l2tp_net_id);
1717         int hash;
1718
1719         INIT_LIST_HEAD(&pn->l2tp_tunnel_list);
1720         spin_lock_init(&pn->l2tp_tunnel_list_lock);
1721
1722         for (hash = 0; hash < L2TP_HASH_SIZE_2; hash++)
1723                 INIT_HLIST_HEAD(&pn->l2tp_session_hlist[hash]);
1724
1725         spin_lock_init(&pn->l2tp_session_hlist_lock);
1726
1727         return 0;
1728 }
1729
1730 static __net_exit void l2tp_exit_net(struct net *net)
1731 {
1732         struct l2tp_net *pn = l2tp_pernet(net);
1733         struct l2tp_tunnel *tunnel = NULL;
1734         int hash;
1735
1736         rcu_read_lock_bh();
1737         list_for_each_entry_rcu(tunnel, &pn->l2tp_tunnel_list, list) {
1738                 l2tp_tunnel_delete(tunnel);
1739         }
1740         rcu_read_unlock_bh();
1741
1742         if (l2tp_wq)
1743                 flush_workqueue(l2tp_wq);
1744         rcu_barrier();
1745
1746         for (hash = 0; hash < L2TP_HASH_SIZE_2; hash++)
1747                 WARN_ON_ONCE(!hlist_empty(&pn->l2tp_session_hlist[hash]));
1748 }
1749
1750 static struct pernet_operations l2tp_net_ops = {
1751         .init = l2tp_init_net,
1752         .exit = l2tp_exit_net,
1753         .id   = &l2tp_net_id,
1754         .size = sizeof(struct l2tp_net),
1755 };
1756
1757 static int __init l2tp_init(void)
1758 {
1759         int rc = 0;
1760
1761         rc = register_pernet_device(&l2tp_net_ops);
1762         if (rc)
1763                 goto out;
1764
1765         l2tp_wq = alloc_workqueue("l2tp", WQ_UNBOUND, 0);
1766         if (!l2tp_wq) {
1767                 pr_err("alloc_workqueue failed\n");
1768                 unregister_pernet_device(&l2tp_net_ops);
1769                 rc = -ENOMEM;
1770                 goto out;
1771         }
1772
1773         pr_info("L2TP core driver, %s\n", L2TP_DRV_VERSION);
1774
1775 out:
1776         return rc;
1777 }
1778
1779 static void __exit l2tp_exit(void)
1780 {
1781         unregister_pernet_device(&l2tp_net_ops);
1782         if (l2tp_wq) {
1783                 destroy_workqueue(l2tp_wq);
1784                 l2tp_wq = NULL;
1785         }
1786 }
1787
1788 module_init(l2tp_init);
1789 module_exit(l2tp_exit);
1790
1791 MODULE_AUTHOR("James Chapman <jchapman@katalix.com>");
1792 MODULE_DESCRIPTION("L2TP core");
1793 MODULE_LICENSE("GPL");
1794 MODULE_VERSION(L2TP_DRV_VERSION);