hc
2024-05-11 04dd17822334871b23ea2862f7798fb0e0007777
kernel/net/l2tp/l2tp_ip.c
....@@ -1,12 +1,7 @@
1
-/*
2
- * L2TPv3 IP encapsulation support
1
+// SPDX-License-Identifier: GPL-2.0-or-later
2
+/* L2TPv3 IP encapsulation support
33 *
44 * Copyright (c) 2008,2009,2010 Katalix Systems Ltd
5
- *
6
- * This program is free software; you can redistribute it and/or
7
- * modify it under the terms of the GNU General Public License
8
- * as published by the Free Software Foundation; either version
9
- * 2 of the License, or (at your option) any later version.
105 */
116
127 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
....@@ -123,14 +118,14 @@
123118 struct l2tp_session *session;
124119 struct l2tp_tunnel *tunnel = NULL;
125120 struct iphdr *iph;
126
- int length;
127121
128122 if (!pskb_may_pull(skb, 4))
129123 goto discard;
130124
131125 /* Point to L2TP header */
132
- optr = ptr = skb->data;
133
- session_id = ntohl(*((__be32 *) ptr));
126
+ optr = skb->data;
127
+ ptr = skb->data;
128
+ session_id = ntohl(*((__be32 *)ptr));
134129 ptr += 4;
135130
136131 /* RFC3931: L2TP/IP packets have the first 4 bytes containing
....@@ -151,19 +146,6 @@
151146 if (!tunnel)
152147 goto discard_sess;
153148
154
- /* Trace packet contents, if enabled */
155
- if (tunnel->debug & L2TP_MSG_DATA) {
156
- length = min(32u, skb->len);
157
- if (!pskb_may_pull(skb, length))
158
- goto discard_sess;
159
-
160
- /* Point to L2TP header */
161
- optr = ptr = skb->data;
162
- ptr += 4;
163
- pr_debug("%s: ip recv\n", tunnel->name);
164
- print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, ptr, length);
165
- }
166
-
167149 if (l2tp_v3_ensure_opt_in_linear(session, skb, &ptr, &optr))
168150 goto discard_sess;
169151
....@@ -180,7 +162,7 @@
180162 if ((skb->data[0] & 0xc0) != 0xc0)
181163 goto discard;
182164
183
- tunnel_id = ntohl(*(__be32 *) &skb->data[4]);
165
+ tunnel_id = ntohl(*(__be32 *)&skb->data[4]);
184166 iph = (struct iphdr *)skb_network_header(skb);
185167
186168 read_lock_bh(&l2tp_ip_lock);
....@@ -196,7 +178,7 @@
196178 if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb))
197179 goto discard_put;
198180
199
- nf_reset(skb);
181
+ nf_reset_ct(skb);
200182
201183 return sk_receive_skb(sk, skb, 1);
202184
....@@ -251,8 +233,8 @@
251233
252234 static void l2tp_ip_destroy_sock(struct sock *sk)
253235 {
236
+ struct l2tp_tunnel *tunnel = l2tp_sk_to_tunnel(sk);
254237 struct sk_buff *skb;
255
- struct l2tp_tunnel *tunnel = sk->sk_user_data;
256238
257239 while ((skb = __skb_dequeue_tail(&sk->sk_write_queue)) != NULL)
258240 kfree_skb(skb);
....@@ -264,7 +246,7 @@
264246 static int l2tp_ip_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
265247 {
266248 struct inet_sock *inet = inet_sk(sk);
267
- struct sockaddr_l2tpip *addr = (struct sockaddr_l2tpip *) uaddr;
249
+ struct sockaddr_l2tpip *addr = (struct sockaddr_l2tpip *)uaddr;
268250 struct net *net = sock_net(sk);
269251 int ret;
270252 int chk_addr_ret;
....@@ -289,8 +271,10 @@
289271 chk_addr_ret != RTN_MULTICAST && chk_addr_ret != RTN_BROADCAST)
290272 goto out;
291273
292
- if (addr->l2tp_addr.s_addr)
293
- inet->inet_rcv_saddr = inet->inet_saddr = addr->l2tp_addr.s_addr;
274
+ if (addr->l2tp_addr.s_addr) {
275
+ inet->inet_rcv_saddr = addr->l2tp_addr.s_addr;
276
+ inet->inet_saddr = addr->l2tp_addr.s_addr;
277
+ }
294278 if (chk_addr_ret == RTN_MULTICAST || chk_addr_ret == RTN_BROADCAST)
295279 inet->inet_saddr = 0; /* Use device */
296280
....@@ -320,7 +304,7 @@
320304
321305 static int l2tp_ip_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
322306 {
323
- struct sockaddr_l2tpip *lsa = (struct sockaddr_l2tpip *) uaddr;
307
+ struct sockaddr_l2tpip *lsa = (struct sockaddr_l2tpip *)uaddr;
324308 int rc;
325309
326310 if (addr_len < sizeof(*lsa))
....@@ -379,6 +363,7 @@
379363 lsa->l2tp_addr.s_addr = inet->inet_daddr;
380364 } else {
381365 __be32 addr = inet->inet_rcv_saddr;
366
+
382367 if (!addr)
383368 addr = inet->inet_saddr;
384369 lsa->l2tp_conn_id = lsk->conn_id;
....@@ -426,6 +411,7 @@
426411 /* Get and verify the address. */
427412 if (msg->msg_name) {
428413 DECLARE_SOCKADDR(struct sockaddr_l2tpip *, lip, msg->msg_name);
414
+
429415 rc = -EINVAL;
430416 if (msg->msg_namelen < sizeof(*lip))
431417 goto out;
....@@ -460,7 +446,7 @@
460446 skb_reset_transport_header(skb);
461447
462448 /* Insert 0 session_id */
463
- *((__be32 *) skb_put(skb, 4)) = 0;
449
+ *((__be32 *)skb_put(skb, 4)) = 0;
464450
465451 /* Copy user data into skb */
466452 rc = memcpy_from_msg(skb_put(skb, len), msg, len);
....@@ -471,10 +457,10 @@
471457
472458 fl4 = &inet->cork.fl.u.ip4;
473459 if (connected)
474
- rt = (struct rtable *) __sk_dst_check(sk, 0);
460
+ rt = (struct rtable *)__sk_dst_check(sk, 0);
475461
476462 rcu_read_lock();
477
- if (rt == NULL) {
463
+ if (!rt) {
478464 const struct ip_options_rcu *inet_opt;
479465
480466 inet_opt = rcu_dereference(inet->inet_opt);
....@@ -596,7 +582,7 @@
596582
597583 return put_user(amount, (int __user *)arg);
598584 }
599
-EXPORT_SYMBOL(l2tp_ioctl);
585
+EXPORT_SYMBOL_GPL(l2tp_ioctl);
600586
601587 static struct proto l2tp_ip_prot = {
602588 .name = "L2TP/IP",
....@@ -616,10 +602,6 @@
616602 .hash = l2tp_ip_hash,
617603 .unhash = l2tp_ip_unhash,
618604 .obj_size = sizeof(struct l2tp_ip_sock),
619
-#ifdef CONFIG_COMPAT
620
- .compat_setsockopt = compat_ip_setsockopt,
621
- .compat_getsockopt = compat_ip_getsockopt,
622
-#endif
623605 };
624606
625607 static const struct proto_ops l2tp_ip_ops = {
....@@ -633,6 +615,7 @@
633615 .getname = l2tp_ip_getname,
634616 .poll = datagram_poll,
635617 .ioctl = inet_ioctl,
618
+ .gettstamp = sock_gettstamp,
636619 .listen = sock_no_listen,
637620 .shutdown = inet_shutdown,
638621 .setsockopt = sock_common_setsockopt,
....@@ -641,10 +624,6 @@
641624 .recvmsg = sock_common_recvmsg,
642625 .mmap = sock_no_mmap,
643626 .sendpage = sock_no_sendpage,
644
-#ifdef CONFIG_COMPAT
645
- .compat_setsockopt = compat_sock_common_setsockopt,
646
- .compat_getsockopt = compat_sock_common_getsockopt,
647
-#endif
648627 };
649628
650629 static struct inet_protosw l2tp_ip_protosw = {