xref: /openbmc/linux/net/tls/tls_strp.c (revision 8b3c59a7)
1c618db2aSJakub Kicinski // SPDX-License-Identifier: GPL-2.0-only
2c618db2aSJakub Kicinski 
3c618db2aSJakub Kicinski #include <linux/skbuff.h>
4c618db2aSJakub Kicinski 
5c618db2aSJakub Kicinski #include "tls.h"
6c618db2aSJakub Kicinski 
7d4e5db64SJakub Kicinski struct sk_buff *tls_strp_msg_detach(struct tls_sw_context_rx *ctx)
8d4e5db64SJakub Kicinski {
9d4e5db64SJakub Kicinski 	struct sk_buff *skb;
10d4e5db64SJakub Kicinski 
11d4e5db64SJakub Kicinski 	skb = ctx->recv_pkt;
12d4e5db64SJakub Kicinski 	ctx->recv_pkt = NULL;
13d4e5db64SJakub Kicinski 	return skb;
14d4e5db64SJakub Kicinski }
15d4e5db64SJakub Kicinski 
16*8b3c59a7SJakub Kicinski int tls_strp_msg_cow(struct tls_sw_context_rx *ctx)
17*8b3c59a7SJakub Kicinski {
18*8b3c59a7SJakub Kicinski 	struct sk_buff *unused;
19*8b3c59a7SJakub Kicinski 	int nsg;
20*8b3c59a7SJakub Kicinski 
21*8b3c59a7SJakub Kicinski 	nsg = skb_cow_data(ctx->recv_pkt, 0, &unused);
22*8b3c59a7SJakub Kicinski 	if (nsg < 0)
23*8b3c59a7SJakub Kicinski 		return nsg;
24*8b3c59a7SJakub Kicinski 	return 0;
25*8b3c59a7SJakub Kicinski }
26*8b3c59a7SJakub Kicinski 
27c618db2aSJakub Kicinski int tls_strp_msg_hold(struct sock *sk, struct sk_buff *skb,
28c618db2aSJakub Kicinski 		      struct sk_buff_head *dst)
29c618db2aSJakub Kicinski {
30c618db2aSJakub Kicinski 	struct sk_buff *clone;
31c618db2aSJakub Kicinski 
32c618db2aSJakub Kicinski 	clone = skb_clone(skb, sk->sk_allocation);
33c618db2aSJakub Kicinski 	if (!clone)
34c618db2aSJakub Kicinski 		return -ENOMEM;
35c618db2aSJakub Kicinski 	__skb_queue_tail(dst, clone);
36c618db2aSJakub Kicinski 	return 0;
37c618db2aSJakub Kicinski }
38