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 7*d4e5db64SJakub Kicinski struct sk_buff *tls_strp_msg_detach(struct tls_sw_context_rx *ctx) 8*d4e5db64SJakub Kicinski { 9*d4e5db64SJakub Kicinski struct sk_buff *skb; 10*d4e5db64SJakub Kicinski 11*d4e5db64SJakub Kicinski skb = ctx->recv_pkt; 12*d4e5db64SJakub Kicinski ctx->recv_pkt = NULL; 13*d4e5db64SJakub Kicinski return skb; 14*d4e5db64SJakub Kicinski } 15*d4e5db64SJakub Kicinski 16c618db2aSJakub Kicinski int tls_strp_msg_hold(struct sock *sk, struct sk_buff *skb, 17c618db2aSJakub Kicinski struct sk_buff_head *dst) 18c618db2aSJakub Kicinski { 19c618db2aSJakub Kicinski struct sk_buff *clone; 20c618db2aSJakub Kicinski 21c618db2aSJakub Kicinski clone = skb_clone(skb, sk->sk_allocation); 22c618db2aSJakub Kicinski if (!clone) 23c618db2aSJakub Kicinski return -ENOMEM; 24c618db2aSJakub Kicinski __skb_queue_tail(dst, clone); 25c618db2aSJakub Kicinski return 0; 26c618db2aSJakub Kicinski } 27