xref: /linux/drivers/net/ovpn/tcp.c (revision 945a670236a7effaba57ed5ccf5dabf673002ef3)
1 // SPDX-License-Identifier: GPL-2.0
2 /*  OpenVPN data channel offload
3  *
4  *  Copyright (C) 2019-2025 OpenVPN, Inc.
5  *
6  *  Author:	Antonio Quartulli <antonio@openvpn.net>
7  */
8 
9 #include <linux/skbuff.h>
10 #include <net/hotdata.h>
11 #include <net/inet_common.h>
12 #include <net/ipv6.h>
13 #include <net/tcp.h>
14 #include <net/transp_v6.h>
15 #include <net/route.h>
16 #include <trace/events/sock.h>
17 
18 #include "ovpnpriv.h"
19 #include "main.h"
20 #include "io.h"
21 #include "peer.h"
22 #include "proto.h"
23 #include "skb.h"
24 #include "tcp.h"
25 
26 #define OVPN_TCP_DEPTH_NESTING	2
27 #if OVPN_TCP_DEPTH_NESTING == SINGLE_DEPTH_NESTING
28 #error "OVPN TCP requires its own lockdep subclass"
29 #endif
30 
31 static struct proto ovpn_tcp_prot __ro_after_init;
32 static struct proto_ops ovpn_tcp_ops __ro_after_init;
33 static struct proto ovpn_tcp6_prot __ro_after_init;
34 static struct proto_ops ovpn_tcp6_ops __ro_after_init;
35 
36 static int ovpn_tcp_parse(struct strparser *strp, struct sk_buff *skb)
37 {
38 	struct strp_msg *rxm = strp_msg(skb);
39 	__be16 blen;
40 	u16 len;
41 	int err;
42 
43 	/* when packets are written to the TCP stream, they are prepended with
44 	 * two bytes indicating the actual packet size.
45 	 * Parse accordingly and return the actual size (including the size
46 	 * header)
47 	 */
48 
49 	if (skb->len < rxm->offset + 2)
50 		return 0;
51 
52 	err = skb_copy_bits(skb, rxm->offset, &blen, sizeof(blen));
53 	if (err < 0)
54 		return err;
55 
56 	len = be16_to_cpu(blen);
57 	if (len < 2)
58 		return -EINVAL;
59 
60 	return len + 2;
61 }
62 
63 /* queue skb for sending to userspace via recvmsg on the socket */
64 static void ovpn_tcp_to_userspace(struct ovpn_peer *peer, struct sock *sk,
65 				  struct sk_buff *skb)
66 {
67 	skb_set_owner_r(skb, sk);
68 	memset(skb->cb, 0, sizeof(skb->cb));
69 	skb_queue_tail(&peer->tcp.user_queue, skb);
70 	peer->tcp.sk_cb.sk_data_ready(sk);
71 }
72 
73 static struct sk_buff *ovpn_tcp_skb_packet(const struct ovpn_peer *peer,
74 					   struct sk_buff *orig_skb,
75 					   const int pkt_len, const int pkt_off)
76 {
77 	struct sk_buff *ovpn_skb;
78 	int err;
79 
80 	/* create a new skb with only the content of the current packet */
81 	ovpn_skb = netdev_alloc_skb(peer->ovpn->dev, pkt_len);
82 	if (unlikely(!ovpn_skb))
83 		goto err;
84 
85 	skb_copy_header(ovpn_skb, orig_skb);
86 	err = skb_copy_bits(orig_skb, pkt_off, skb_put(ovpn_skb, pkt_len),
87 			    pkt_len);
88 	if (unlikely(err)) {
89 		net_warn_ratelimited("%s: skb_copy_bits failed for peer %u\n",
90 				     netdev_name(peer->ovpn->dev), peer->id);
91 		kfree_skb(ovpn_skb);
92 		goto err;
93 	}
94 
95 	consume_skb(orig_skb);
96 	return ovpn_skb;
97 err:
98 	kfree_skb(orig_skb);
99 	return NULL;
100 }
101 
102 static void ovpn_tcp_rcv(struct strparser *strp, struct sk_buff *skb)
103 {
104 	struct ovpn_peer *peer = container_of(strp, struct ovpn_peer, tcp.strp);
105 	struct strp_msg *msg = strp_msg(skb);
106 	int pkt_len = msg->full_len - 2;
107 	u8 opcode;
108 
109 	/* we need at least 4 bytes of data in the packet
110 	 * to extract the opcode and the key ID later on
111 	 */
112 	if (unlikely(pkt_len < OVPN_OPCODE_SIZE)) {
113 		net_warn_ratelimited("%s: packet too small to fetch opcode for peer %u\n",
114 				     netdev_name(peer->ovpn->dev), peer->id);
115 		goto err;
116 	}
117 
118 	/* extract the packet into a new skb */
119 	skb = ovpn_tcp_skb_packet(peer, skb, pkt_len, msg->offset + 2);
120 	if (unlikely(!skb))
121 		goto err;
122 
123 	/* DATA_V2 packets are handled in kernel, the rest goes to user space */
124 	opcode = ovpn_opcode_from_skb(skb, 0);
125 	if (unlikely(opcode != OVPN_DATA_V2)) {
126 		if (opcode == OVPN_DATA_V1) {
127 			net_warn_ratelimited("%s: DATA_V1 detected on the TCP stream\n",
128 					     netdev_name(peer->ovpn->dev));
129 			goto err;
130 		}
131 
132 		/* The packet size header must be there when sending the packet
133 		 * to userspace, therefore we put it back
134 		 */
135 		*(__be16 *)__skb_push(skb, sizeof(u16)) = htons(pkt_len);
136 		ovpn_tcp_to_userspace(peer, strp->sk, skb);
137 		return;
138 	}
139 
140 	/* hold reference to peer as required by ovpn_recv().
141 	 *
142 	 * NOTE: in this context we should already be holding a reference to
143 	 * this peer, therefore ovpn_peer_hold() is not expected to fail
144 	 */
145 	if (WARN_ON(!ovpn_peer_hold(peer)))
146 		goto err_nopeer;
147 
148 	ovpn_recv(peer, skb);
149 	return;
150 err:
151 	/* take reference for deferred peer deletion. should never fail */
152 	if (WARN_ON(!ovpn_peer_hold(peer)))
153 		goto err_nopeer;
154 	if (!schedule_work(&peer->tcp.defer_del_work))
155 		ovpn_peer_put(peer);
156 	ovpn_dev_dstats_rx_dropped(peer->ovpn->dev);
157 err_nopeer:
158 	kfree_skb(skb);
159 }
160 
161 static int ovpn_tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
162 			    int flags)
163 {
164 	int err = 0, off, copied = 0, ret;
165 	struct ovpn_socket *sock;
166 	struct ovpn_peer *peer;
167 	struct sk_buff *skb;
168 
169 	rcu_read_lock();
170 	sock = rcu_dereference_sk_user_data(sk);
171 	if (unlikely(!sock || !sock->peer || !ovpn_peer_hold(sock->peer))) {
172 		rcu_read_unlock();
173 		return -EBADF;
174 	}
175 	peer = sock->peer;
176 	rcu_read_unlock();
177 
178 	skb = __skb_recv_datagram(sk, &peer->tcp.user_queue, flags, &off, &err);
179 	if (!skb) {
180 		if (err == -EAGAIN && sk->sk_shutdown & RCV_SHUTDOWN) {
181 			ret = 0;
182 			goto out;
183 		}
184 		ret = err;
185 		goto out;
186 	}
187 
188 	copied = len;
189 	if (copied > skb->len)
190 		copied = skb->len;
191 	else if (copied < skb->len)
192 		msg->msg_flags |= MSG_TRUNC;
193 
194 	err = skb_copy_datagram_msg(skb, 0, msg, copied);
195 	if (unlikely(err)) {
196 		kfree_skb(skb);
197 		ret = err;
198 		goto out;
199 	}
200 
201 	if (flags & MSG_TRUNC)
202 		copied = skb->len;
203 	kfree_skb(skb);
204 	ret = copied;
205 out:
206 	ovpn_peer_put(peer);
207 	return ret;
208 }
209 
210 void ovpn_tcp_socket_detach(struct ovpn_socket *ovpn_sock)
211 {
212 	struct ovpn_peer *peer = ovpn_sock->peer;
213 	struct sock *sk = ovpn_sock->sk;
214 
215 	strp_stop(&peer->tcp.strp);
216 	skb_queue_purge(&peer->tcp.user_queue);
217 
218 	/* restore CBs that were saved in ovpn_sock_set_tcp_cb() */
219 	sk->sk_data_ready = peer->tcp.sk_cb.sk_data_ready;
220 	sk->sk_write_space = peer->tcp.sk_cb.sk_write_space;
221 	sk->sk_prot = peer->tcp.sk_cb.prot;
222 
223 	/* tcp_close() may race this function and could set
224 	 * sk->sk_socket to NULL. It does so by invoking
225 	 * sock_orphan(), which holds sk_callback_lock before
226 	 * doing the assignment.
227 	 *
228 	 * For this reason we acquire the same lock to avoid
229 	 * sk_socket to disappear under our feet
230 	 */
231 	write_lock_bh(&sk->sk_callback_lock);
232 	if (sk->sk_socket)
233 		sk->sk_socket->ops = peer->tcp.sk_cb.ops;
234 	write_unlock_bh(&sk->sk_callback_lock);
235 
236 	rcu_assign_sk_user_data(sk, NULL);
237 }
238 
239 void ovpn_tcp_socket_wait_finish(struct ovpn_socket *sock)
240 {
241 	struct ovpn_peer *peer = sock->peer;
242 
243 	/* NOTE: we don't wait for peer->tcp.defer_del_work to finish:
244 	 * either the worker is not running or this function
245 	 * was invoked by that worker.
246 	 */
247 
248 	cancel_work_sync(&sock->tcp_tx_work);
249 	strp_done(&peer->tcp.strp);
250 
251 	skb_queue_purge(&peer->tcp.out_queue);
252 	kfree_skb(peer->tcp.out_msg.skb);
253 	peer->tcp.out_msg.skb = NULL;
254 }
255 
256 static void ovpn_tcp_send_sock(struct ovpn_peer *peer, struct sock *sk)
257 {
258 	struct sk_buff *skb = peer->tcp.out_msg.skb;
259 	int ret, flags;
260 
261 	if (!skb)
262 		return;
263 
264 	if (peer->tcp.tx_in_progress)
265 		return;
266 
267 	peer->tcp.tx_in_progress = true;
268 
269 	do {
270 		flags = ovpn_skb_cb(skb)->nosignal ? MSG_NOSIGNAL : 0;
271 		ret = skb_send_sock_locked_with_flags(sk, skb,
272 						      peer->tcp.out_msg.offset,
273 						      peer->tcp.out_msg.len,
274 						      flags);
275 		if (unlikely(ret < 0)) {
276 			if (ret == -EAGAIN)
277 				goto out;
278 
279 			net_warn_ratelimited("%s: TCP error to peer %u: %d\n",
280 					     netdev_name(peer->ovpn->dev),
281 					     peer->id, ret);
282 
283 			/* in case of TCP error we can't recover the VPN
284 			 * stream therefore we abort the connection
285 			 */
286 			ovpn_peer_hold(peer);
287 			if (!schedule_work(&peer->tcp.defer_del_work))
288 				ovpn_peer_put(peer);
289 
290 			/* we bail out immediately and keep tx_in_progress set
291 			 * to true. This way we prevent more TX attempts
292 			 * which would lead to more invocations of
293 			 * schedule_work()
294 			 */
295 			return;
296 		}
297 
298 		peer->tcp.out_msg.len -= ret;
299 		peer->tcp.out_msg.offset += ret;
300 	} while (peer->tcp.out_msg.len > 0);
301 
302 	if (!peer->tcp.out_msg.len) {
303 		local_bh_disable();
304 		dev_dstats_tx_add(peer->ovpn->dev, skb->len);
305 		local_bh_enable();
306 	}
307 
308 	kfree_skb(peer->tcp.out_msg.skb);
309 	peer->tcp.out_msg.skb = NULL;
310 	peer->tcp.out_msg.len = 0;
311 	peer->tcp.out_msg.offset = 0;
312 
313 out:
314 	peer->tcp.tx_in_progress = false;
315 }
316 
317 void ovpn_tcp_tx_work(struct work_struct *work)
318 {
319 	struct ovpn_socket *sock;
320 
321 	sock = container_of(work, struct ovpn_socket, tcp_tx_work);
322 
323 	lock_sock(sock->sk);
324 	if (sock->peer)
325 		ovpn_tcp_send_sock(sock->peer, sock->sk);
326 	release_sock(sock->sk);
327 }
328 
329 static void ovpn_tcp_send_sock_skb(struct ovpn_peer *peer, struct sock *sk,
330 				   struct sk_buff *skb)
331 {
332 	if (peer->tcp.out_msg.skb)
333 		ovpn_tcp_send_sock(peer, sk);
334 
335 	if (peer->tcp.out_msg.skb) {
336 		ovpn_dev_dstats_tx_dropped(peer->ovpn->dev);
337 		kfree_skb(skb);
338 		return;
339 	}
340 
341 	peer->tcp.out_msg.skb = skb;
342 	peer->tcp.out_msg.len = skb->len;
343 	peer->tcp.out_msg.offset = 0;
344 	ovpn_tcp_send_sock(peer, sk);
345 }
346 
347 void ovpn_tcp_send_skb(struct ovpn_peer *peer, struct sock *sk,
348 		       struct sk_buff *skb)
349 {
350 	u16 len = skb->len;
351 
352 	*(__be16 *)__skb_push(skb, sizeof(u16)) = htons(len);
353 
354 	spin_lock_nested(&sk->sk_lock.slock, OVPN_TCP_DEPTH_NESTING);
355 	if (sock_owned_by_user(sk)) {
356 		if (skb_queue_len(&peer->tcp.out_queue) >=
357 		    READ_ONCE(net_hotdata.max_backlog)) {
358 			ovpn_dev_dstats_tx_dropped(peer->ovpn->dev);
359 			kfree_skb(skb);
360 			goto unlock;
361 		}
362 		__skb_queue_tail(&peer->tcp.out_queue, skb);
363 	} else {
364 		ovpn_tcp_send_sock_skb(peer, sk, skb);
365 	}
366 unlock:
367 	spin_unlock(&sk->sk_lock.slock);
368 }
369 
370 static void ovpn_tcp_release(struct sock *sk)
371 {
372 	struct sk_buff_head queue;
373 	struct ovpn_socket *sock;
374 	struct ovpn_peer *peer;
375 	struct sk_buff *skb;
376 
377 	rcu_read_lock();
378 	sock = rcu_dereference_sk_user_data(sk);
379 	if (!sock) {
380 		rcu_read_unlock();
381 		return;
382 	}
383 
384 	peer = sock->peer;
385 
386 	/* during initialization this function is called before
387 	 * assigning sock->peer
388 	 */
389 	if (unlikely(!peer || !ovpn_peer_hold(peer))) {
390 		rcu_read_unlock();
391 		return;
392 	}
393 	rcu_read_unlock();
394 
395 	__skb_queue_head_init(&queue);
396 	skb_queue_splice_init(&peer->tcp.out_queue, &queue);
397 
398 	while ((skb = __skb_dequeue(&queue)))
399 		ovpn_tcp_send_sock_skb(peer, sk, skb);
400 
401 	peer->tcp.sk_cb.prot->release_cb(sk);
402 	ovpn_peer_put(peer);
403 }
404 
405 static int ovpn_tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)
406 {
407 	struct ovpn_socket *sock;
408 	int ret, linear = PAGE_SIZE;
409 	struct ovpn_peer *peer;
410 	struct sk_buff *skb;
411 
412 	lock_sock(sk);
413 	rcu_read_lock();
414 	sock = rcu_dereference_sk_user_data(sk);
415 	if (unlikely(!sock || !sock->peer || !ovpn_peer_hold(sock->peer))) {
416 		rcu_read_unlock();
417 		release_sock(sk);
418 		return -EIO;
419 	}
420 	rcu_read_unlock();
421 	peer = sock->peer;
422 
423 	if (msg->msg_flags & ~(MSG_DONTWAIT | MSG_NOSIGNAL)) {
424 		ret = -EOPNOTSUPP;
425 		goto peer_free;
426 	}
427 
428 	if (peer->tcp.out_msg.skb) {
429 		ret = -EAGAIN;
430 		goto peer_free;
431 	}
432 
433 	if (size < linear)
434 		linear = size;
435 
436 	skb = sock_alloc_send_pskb(sk, linear, size - linear,
437 				   msg->msg_flags & MSG_DONTWAIT, &ret, 0);
438 	if (!skb) {
439 		net_err_ratelimited("%s: skb alloc failed: %d\n",
440 				    netdev_name(peer->ovpn->dev), ret);
441 		goto peer_free;
442 	}
443 
444 	skb_put(skb, linear);
445 	skb->len = size;
446 	skb->data_len = size - linear;
447 
448 	ret = skb_copy_datagram_from_iter(skb, 0, &msg->msg_iter, size);
449 	if (ret) {
450 		kfree_skb(skb);
451 		net_err_ratelimited("%s: skb copy from iter failed: %d\n",
452 				    netdev_name(peer->ovpn->dev), ret);
453 		goto peer_free;
454 	}
455 
456 	ovpn_skb_cb(skb)->nosignal = msg->msg_flags & MSG_NOSIGNAL;
457 	ovpn_tcp_send_sock_skb(peer, sk, skb);
458 	ret = size;
459 peer_free:
460 	release_sock(sk);
461 	ovpn_peer_put(peer);
462 	return ret;
463 }
464 
465 static int ovpn_tcp_disconnect(struct sock *sk, int flags)
466 {
467 	return -EBUSY;
468 }
469 
470 static void ovpn_tcp_data_ready(struct sock *sk)
471 {
472 	struct ovpn_socket *sock;
473 
474 	trace_sk_data_ready(sk);
475 
476 	rcu_read_lock();
477 	sock = rcu_dereference_sk_user_data(sk);
478 	if (likely(sock && sock->peer))
479 		strp_data_ready(&sock->peer->tcp.strp);
480 	rcu_read_unlock();
481 }
482 
483 static void ovpn_tcp_write_space(struct sock *sk)
484 {
485 	struct ovpn_socket *sock;
486 
487 	rcu_read_lock();
488 	sock = rcu_dereference_sk_user_data(sk);
489 	if (likely(sock && sock->peer)) {
490 		schedule_work(&sock->tcp_tx_work);
491 		sock->peer->tcp.sk_cb.sk_write_space(sk);
492 	}
493 	rcu_read_unlock();
494 }
495 
496 static void ovpn_tcp_build_protos(struct proto *new_prot,
497 				  struct proto_ops *new_ops,
498 				  const struct proto *orig_prot,
499 				  const struct proto_ops *orig_ops);
500 
501 static void ovpn_tcp_peer_del_work(struct work_struct *work)
502 {
503 	struct ovpn_peer *peer = container_of(work, struct ovpn_peer,
504 					      tcp.defer_del_work);
505 
506 	ovpn_peer_del(peer, OVPN_DEL_PEER_REASON_TRANSPORT_ERROR);
507 	ovpn_peer_put(peer);
508 }
509 
510 /* Set TCP encapsulation callbacks */
511 int ovpn_tcp_socket_attach(struct ovpn_socket *ovpn_sock,
512 			   struct ovpn_peer *peer)
513 {
514 	struct strp_callbacks cb = {
515 		.rcv_msg = ovpn_tcp_rcv,
516 		.parse_msg = ovpn_tcp_parse,
517 	};
518 	int ret;
519 
520 	/* make sure no pre-existing encapsulation handler exists */
521 	if (ovpn_sock->sk->sk_user_data)
522 		return -EBUSY;
523 	rcu_assign_sk_user_data(ovpn_sock->sk, ovpn_sock);
524 
525 	/* only a fully connected socket is expected. Connection should be
526 	 * handled in userspace
527 	 */
528 	if (ovpn_sock->sk->sk_state != TCP_ESTABLISHED) {
529 		net_err_ratelimited("%s: provided TCP socket is not in ESTABLISHED state: %d\n",
530 				    netdev_name(peer->ovpn->dev),
531 				    ovpn_sock->sk->sk_state);
532 		ret = -EINVAL;
533 		goto err;
534 	}
535 
536 	ret = strp_init(&peer->tcp.strp, ovpn_sock->sk, &cb);
537 	if (ret < 0) {
538 		DEBUG_NET_WARN_ON_ONCE(1);
539 		goto err;
540 	}
541 
542 	INIT_WORK(&peer->tcp.defer_del_work, ovpn_tcp_peer_del_work);
543 
544 	__sk_dst_reset(ovpn_sock->sk);
545 	skb_queue_head_init(&peer->tcp.user_queue);
546 	skb_queue_head_init(&peer->tcp.out_queue);
547 
548 	/* save current CBs so that they can be restored upon socket release */
549 	peer->tcp.sk_cb.sk_data_ready = ovpn_sock->sk->sk_data_ready;
550 	peer->tcp.sk_cb.sk_write_space = ovpn_sock->sk->sk_write_space;
551 	peer->tcp.sk_cb.prot = ovpn_sock->sk->sk_prot;
552 	peer->tcp.sk_cb.ops = ovpn_sock->sk->sk_socket->ops;
553 
554 	/* assign our static CBs and prot/ops */
555 	ovpn_sock->sk->sk_data_ready = ovpn_tcp_data_ready;
556 	ovpn_sock->sk->sk_write_space = ovpn_tcp_write_space;
557 
558 	if (ovpn_sock->sk->sk_family == AF_INET) {
559 		ovpn_sock->sk->sk_prot = &ovpn_tcp_prot;
560 		ovpn_sock->sk->sk_socket->ops = &ovpn_tcp_ops;
561 	} else {
562 		ovpn_sock->sk->sk_prot = &ovpn_tcp6_prot;
563 		ovpn_sock->sk->sk_socket->ops = &ovpn_tcp6_ops;
564 	}
565 
566 	/* avoid using task_frag */
567 	ovpn_sock->sk->sk_allocation = GFP_ATOMIC;
568 	ovpn_sock->sk->sk_use_task_frag = false;
569 
570 	/* enqueue the RX worker */
571 	strp_check_rcv(&peer->tcp.strp);
572 
573 	return 0;
574 err:
575 	rcu_assign_sk_user_data(ovpn_sock->sk, NULL);
576 	return ret;
577 }
578 
579 static void ovpn_tcp_close(struct sock *sk, long timeout)
580 {
581 	struct ovpn_socket *sock;
582 	struct ovpn_peer *peer;
583 
584 	rcu_read_lock();
585 	sock = rcu_dereference_sk_user_data(sk);
586 	if (!sock) {
587 		rcu_read_unlock();
588 		return;
589 	}
590 
591 	peer = sock->peer;
592 	if (!peer || !ovpn_peer_hold(peer)) {
593 		rcu_read_unlock();
594 		return;
595 	}
596 	rcu_read_unlock();
597 
598 	ovpn_peer_del(peer, OVPN_DEL_PEER_REASON_TRANSPORT_DISCONNECT);
599 	peer->tcp.sk_cb.prot->close(sk, timeout);
600 	ovpn_peer_put(peer);
601 }
602 
603 static __poll_t ovpn_tcp_poll(struct file *file, struct socket *sock,
604 			      poll_table *wait)
605 {
606 	struct sk_buff_head *queue = &sock->sk->sk_receive_queue;
607 	struct ovpn_socket *ovpn_sock;
608 	struct ovpn_peer *peer = NULL;
609 	__poll_t mask;
610 
611 	rcu_read_lock();
612 	ovpn_sock = rcu_dereference_sk_user_data(sock->sk);
613 	/* if we landed in this callback, we expect to have a
614 	 * meaningful state. The ovpn_socket lifecycle would
615 	 * prevent it otherwise.
616 	 */
617 	if (WARN(!ovpn_sock || !ovpn_sock->peer,
618 		 "ovpn: null state in ovpn_tcp_poll!")) {
619 		rcu_read_unlock();
620 		return 0;
621 	}
622 
623 	if (ovpn_peer_hold(ovpn_sock->peer)) {
624 		peer = ovpn_sock->peer;
625 		queue = &peer->tcp.user_queue;
626 	}
627 	rcu_read_unlock();
628 
629 	mask = datagram_poll_queue(file, sock, wait, queue);
630 
631 	if (peer)
632 		ovpn_peer_put(peer);
633 
634 	return mask;
635 }
636 
637 static void ovpn_tcp_build_protos(struct proto *new_prot,
638 				  struct proto_ops *new_ops,
639 				  const struct proto *orig_prot,
640 				  const struct proto_ops *orig_ops)
641 {
642 	memcpy(new_prot, orig_prot, sizeof(*new_prot));
643 	memcpy(new_ops, orig_ops, sizeof(*new_ops));
644 	new_prot->recvmsg = ovpn_tcp_recvmsg;
645 	new_prot->sendmsg = ovpn_tcp_sendmsg;
646 	new_prot->disconnect = ovpn_tcp_disconnect;
647 	new_prot->close = ovpn_tcp_close;
648 	new_prot->release_cb = ovpn_tcp_release;
649 	new_ops->poll = ovpn_tcp_poll;
650 }
651 
652 /* Initialize TCP static objects */
653 void __init ovpn_tcp_init(void)
654 {
655 	ovpn_tcp_build_protos(&ovpn_tcp_prot, &ovpn_tcp_ops, &tcp_prot,
656 			      &inet_stream_ops);
657 
658 #if IS_ENABLED(CONFIG_IPV6)
659 	ovpn_tcp_build_protos(&ovpn_tcp6_prot, &ovpn_tcp6_ops, &tcpv6_prot,
660 			      &inet6_stream_ops);
661 #endif
662 }
663