1 /* Copyright (c) 2018, Mellanox Technologies All rights reserved.
3 * This software is available to you under a choice of one of two
4 * licenses. You may choose to be licensed under the terms of the GNU
5 * General Public License (GPL) Version 2, available from the file
6 * COPYING in the main directory of this source tree, or the
7 * OpenIB.org BSD license below:
9 * Redistribution and use in source and binary forms, with or
10 * without modification, are permitted provided that the following
13 * - Redistributions of source code must retain the above
14 * copyright notice, this list of conditions and the following
17 * - Redistributions in binary form must reproduce the above
18 * copyright notice, this list of conditions and the following
19 * disclaimer in the documentation and/or other materials
20 * provided with the distribution.
22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
26 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
28 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32 #include <crypto/aead.h>
33 #include <linux/highmem.h>
34 #include <linux/module.h>
35 #include <linux/netdevice.h>
37 #include <net/inet_connection_sock.h>
41 /* device_offload_lock is used to synchronize tls_dev_add
42 * against NETDEV_DOWN notifications.
44 static DECLARE_RWSEM(device_offload_lock
);
46 static void tls_device_gc_task(struct work_struct
*work
);
48 static DECLARE_WORK(tls_device_gc_work
, tls_device_gc_task
);
49 static LIST_HEAD(tls_device_gc_list
);
50 static LIST_HEAD(tls_device_list
);
51 static DEFINE_SPINLOCK(tls_device_lock
);
53 static void tls_device_free_ctx(struct tls_context
*ctx
)
55 if (ctx
->tx_conf
== TLS_HW
) {
56 kfree(tls_offload_ctx_tx(ctx
));
57 kfree(ctx
->tx
.rec_seq
);
61 if (ctx
->rx_conf
== TLS_HW
)
62 kfree(tls_offload_ctx_rx(ctx
));
67 static void tls_device_gc_task(struct work_struct
*work
)
69 struct tls_context
*ctx
, *tmp
;
73 spin_lock_irqsave(&tls_device_lock
, flags
);
74 list_splice_init(&tls_device_gc_list
, &gc_list
);
75 spin_unlock_irqrestore(&tls_device_lock
, flags
);
77 list_for_each_entry_safe(ctx
, tmp
, &gc_list
, list
) {
78 struct net_device
*netdev
= ctx
->netdev
;
80 if (netdev
&& ctx
->tx_conf
== TLS_HW
) {
81 netdev
->tlsdev_ops
->tls_dev_del(netdev
, ctx
,
82 TLS_OFFLOAD_CTX_DIR_TX
);
88 tls_device_free_ctx(ctx
);
92 static void tls_device_attach(struct tls_context
*ctx
, struct sock
*sk
,
93 struct net_device
*netdev
)
95 if (sk
->sk_destruct
!= tls_device_sk_destruct
) {
96 refcount_set(&ctx
->refcount
, 1);
99 spin_lock_irq(&tls_device_lock
);
100 list_add_tail(&ctx
->list
, &tls_device_list
);
101 spin_unlock_irq(&tls_device_lock
);
103 ctx
->sk_destruct
= sk
->sk_destruct
;
104 sk
->sk_destruct
= tls_device_sk_destruct
;
108 static void tls_device_queue_ctx_destruction(struct tls_context
*ctx
)
112 spin_lock_irqsave(&tls_device_lock
, flags
);
113 list_move_tail(&ctx
->list
, &tls_device_gc_list
);
115 /* schedule_work inside the spinlock
116 * to make sure tls_device_down waits for that work.
118 schedule_work(&tls_device_gc_work
);
120 spin_unlock_irqrestore(&tls_device_lock
, flags
);
123 /* We assume that the socket is already connected */
124 static struct net_device
*get_netdev_for_sock(struct sock
*sk
)
126 struct dst_entry
*dst
= sk_dst_get(sk
);
127 struct net_device
*netdev
= NULL
;
139 static void destroy_record(struct tls_record_info
*record
)
141 int nr_frags
= record
->num_frags
;
144 while (nr_frags
-- > 0) {
145 frag
= &record
->frags
[nr_frags
];
146 __skb_frag_unref(frag
);
151 static void delete_all_records(struct tls_offload_context_tx
*offload_ctx
)
153 struct tls_record_info
*info
, *temp
;
155 list_for_each_entry_safe(info
, temp
, &offload_ctx
->records_list
, list
) {
156 list_del(&info
->list
);
157 destroy_record(info
);
160 offload_ctx
->retransmit_hint
= NULL
;
163 static void tls_icsk_clean_acked(struct sock
*sk
, u32 acked_seq
)
165 struct tls_context
*tls_ctx
= tls_get_ctx(sk
);
166 struct tls_record_info
*info
, *temp
;
167 struct tls_offload_context_tx
*ctx
;
168 u64 deleted_records
= 0;
174 ctx
= tls_offload_ctx_tx(tls_ctx
);
176 spin_lock_irqsave(&ctx
->lock
, flags
);
177 info
= ctx
->retransmit_hint
;
178 if (info
&& !before(acked_seq
, info
->end_seq
)) {
179 ctx
->retransmit_hint
= NULL
;
180 list_del(&info
->list
);
181 destroy_record(info
);
185 list_for_each_entry_safe(info
, temp
, &ctx
->records_list
, list
) {
186 if (before(acked_seq
, info
->end_seq
))
188 list_del(&info
->list
);
190 destroy_record(info
);
194 ctx
->unacked_record_sn
+= deleted_records
;
195 spin_unlock_irqrestore(&ctx
->lock
, flags
);
198 /* At this point, there should be no references on this
199 * socket and no in-flight SKBs associated with this
200 * socket, so it is safe to free all the resources.
202 void tls_device_sk_destruct(struct sock
*sk
)
204 struct tls_context
*tls_ctx
= tls_get_ctx(sk
);
205 struct tls_offload_context_tx
*ctx
= tls_offload_ctx_tx(tls_ctx
);
207 tls_ctx
->sk_destruct(sk
);
209 if (tls_ctx
->tx_conf
== TLS_HW
) {
210 if (ctx
->open_record
)
211 destroy_record(ctx
->open_record
);
212 delete_all_records(ctx
);
213 crypto_free_aead(ctx
->aead_send
);
214 clean_acked_data_disable(inet_csk(sk
));
217 if (refcount_dec_and_test(&tls_ctx
->refcount
))
218 tls_device_queue_ctx_destruction(tls_ctx
);
220 EXPORT_SYMBOL(tls_device_sk_destruct
);
222 void tls_device_free_resources_tx(struct sock
*sk
)
224 struct tls_context
*tls_ctx
= tls_get_ctx(sk
);
226 tls_free_partial_record(sk
, tls_ctx
);
229 static void tls_append_frag(struct tls_record_info
*record
,
230 struct page_frag
*pfrag
,
235 frag
= &record
->frags
[record
->num_frags
- 1];
236 if (frag
->page
.p
== pfrag
->page
&&
237 frag
->page_offset
+ frag
->size
== pfrag
->offset
) {
241 frag
->page
.p
= pfrag
->page
;
242 frag
->page_offset
= pfrag
->offset
;
245 get_page(pfrag
->page
);
248 pfrag
->offset
+= size
;
252 static int tls_push_record(struct sock
*sk
,
253 struct tls_context
*ctx
,
254 struct tls_offload_context_tx
*offload_ctx
,
255 struct tls_record_info
*record
,
256 struct page_frag
*pfrag
,
258 unsigned char record_type
)
260 struct tls_prot_info
*prot
= &ctx
->prot_info
;
261 struct tcp_sock
*tp
= tcp_sk(sk
);
262 struct page_frag dummy_tag_frag
;
267 frag
= &record
->frags
[0];
268 tls_fill_prepend(ctx
,
269 skb_frag_address(frag
),
270 record
->len
- prot
->prepend_size
,
272 ctx
->crypto_send
.info
.version
);
274 /* HW doesn't care about the data in the tag, because it fills it. */
275 dummy_tag_frag
.page
= skb_frag_page(frag
);
276 dummy_tag_frag
.offset
= 0;
278 tls_append_frag(record
, &dummy_tag_frag
, prot
->tag_size
);
279 record
->end_seq
= tp
->write_seq
+ record
->len
;
280 spin_lock_irq(&offload_ctx
->lock
);
281 list_add_tail(&record
->list
, &offload_ctx
->records_list
);
282 spin_unlock_irq(&offload_ctx
->lock
);
283 offload_ctx
->open_record
= NULL
;
284 tls_advance_record_sn(sk
, &ctx
->tx
, ctx
->crypto_send
.info
.version
);
286 for (i
= 0; i
< record
->num_frags
; i
++) {
287 frag
= &record
->frags
[i
];
288 sg_unmark_end(&offload_ctx
->sg_tx_data
[i
]);
289 sg_set_page(&offload_ctx
->sg_tx_data
[i
], skb_frag_page(frag
),
290 frag
->size
, frag
->page_offset
);
291 sk_mem_charge(sk
, frag
->size
);
292 get_page(skb_frag_page(frag
));
294 sg_mark_end(&offload_ctx
->sg_tx_data
[record
->num_frags
- 1]);
296 /* all ready, send */
297 return tls_push_sg(sk
, ctx
, offload_ctx
->sg_tx_data
, 0, flags
);
300 static int tls_create_new_record(struct tls_offload_context_tx
*offload_ctx
,
301 struct page_frag
*pfrag
,
304 struct tls_record_info
*record
;
307 record
= kmalloc(sizeof(*record
), GFP_KERNEL
);
311 frag
= &record
->frags
[0];
312 __skb_frag_set_page(frag
, pfrag
->page
);
313 frag
->page_offset
= pfrag
->offset
;
314 skb_frag_size_set(frag
, prepend_size
);
316 get_page(pfrag
->page
);
317 pfrag
->offset
+= prepend_size
;
319 record
->num_frags
= 1;
320 record
->len
= prepend_size
;
321 offload_ctx
->open_record
= record
;
325 static int tls_do_allocation(struct sock
*sk
,
326 struct tls_offload_context_tx
*offload_ctx
,
327 struct page_frag
*pfrag
,
332 if (!offload_ctx
->open_record
) {
333 if (unlikely(!skb_page_frag_refill(prepend_size
, pfrag
,
334 sk
->sk_allocation
))) {
335 sk
->sk_prot
->enter_memory_pressure(sk
);
336 sk_stream_moderate_sndbuf(sk
);
340 ret
= tls_create_new_record(offload_ctx
, pfrag
, prepend_size
);
344 if (pfrag
->size
> pfrag
->offset
)
348 if (!sk_page_frag_refill(sk
, pfrag
))
354 static int tls_push_data(struct sock
*sk
,
355 struct iov_iter
*msg_iter
,
356 size_t size
, int flags
,
357 unsigned char record_type
)
359 struct tls_context
*tls_ctx
= tls_get_ctx(sk
);
360 struct tls_prot_info
*prot
= &tls_ctx
->prot_info
;
361 struct tls_offload_context_tx
*ctx
= tls_offload_ctx_tx(tls_ctx
);
362 int tls_push_record_flags
= flags
| MSG_SENDPAGE_NOTLAST
;
363 int more
= flags
& (MSG_SENDPAGE_NOTLAST
| MSG_MORE
);
364 struct tls_record_info
*record
= ctx
->open_record
;
365 struct page_frag
*pfrag
;
366 size_t orig_size
= size
;
367 u32 max_open_record_len
;
373 ~(MSG_MORE
| MSG_DONTWAIT
| MSG_NOSIGNAL
| MSG_SENDPAGE_NOTLAST
))
379 timeo
= sock_sndtimeo(sk
, flags
& MSG_DONTWAIT
);
380 if (tls_is_partially_sent_record(tls_ctx
)) {
381 rc
= tls_push_partial_record(sk
, tls_ctx
, flags
);
386 pfrag
= sk_page_frag(sk
);
388 /* TLS_HEADER_SIZE is not counted as part of the TLS record, and
389 * we need to leave room for an authentication tag.
391 max_open_record_len
= TLS_MAX_PAYLOAD_SIZE
+
394 rc
= tls_do_allocation(sk
, ctx
, pfrag
,
397 rc
= sk_stream_wait_memory(sk
, &timeo
);
401 record
= ctx
->open_record
;
405 if (record_type
!= TLS_RECORD_TYPE_DATA
) {
406 /* avoid sending partial
407 * record with type !=
411 destroy_record(record
);
412 ctx
->open_record
= NULL
;
413 } else if (record
->len
> prot
->prepend_size
) {
420 record
= ctx
->open_record
;
421 copy
= min_t(size_t, size
, (pfrag
->size
- pfrag
->offset
));
422 copy
= min_t(size_t, copy
, (max_open_record_len
- record
->len
));
424 if (copy_from_iter_nocache(page_address(pfrag
->page
) +
426 copy
, msg_iter
) != copy
) {
430 tls_append_frag(record
, pfrag
, copy
);
435 tls_push_record_flags
= flags
;
437 tls_ctx
->pending_open_record_frags
=
445 if (done
|| record
->len
>= max_open_record_len
||
446 (record
->num_frags
>= MAX_SKB_FRAGS
- 1)) {
447 rc
= tls_push_record(sk
,
452 tls_push_record_flags
,
459 if (orig_size
- size
> 0)
460 rc
= orig_size
- size
;
465 int tls_device_sendmsg(struct sock
*sk
, struct msghdr
*msg
, size_t size
)
467 unsigned char record_type
= TLS_RECORD_TYPE_DATA
;
472 if (unlikely(msg
->msg_controllen
)) {
473 rc
= tls_proccess_cmsg(sk
, msg
, &record_type
);
478 rc
= tls_push_data(sk
, &msg
->msg_iter
, size
,
479 msg
->msg_flags
, record_type
);
486 int tls_device_sendpage(struct sock
*sk
, struct page
*page
,
487 int offset
, size_t size
, int flags
)
489 struct iov_iter msg_iter
;
490 char *kaddr
= kmap(page
);
494 if (flags
& MSG_SENDPAGE_NOTLAST
)
499 if (flags
& MSG_OOB
) {
504 iov
.iov_base
= kaddr
+ offset
;
506 iov_iter_kvec(&msg_iter
, WRITE
, &iov
, 1, size
);
507 rc
= tls_push_data(sk
, &msg_iter
, size
,
508 flags
, TLS_RECORD_TYPE_DATA
);
516 struct tls_record_info
*tls_get_record(struct tls_offload_context_tx
*context
,
517 u32 seq
, u64
*p_record_sn
)
519 u64 record_sn
= context
->hint_record_sn
;
520 struct tls_record_info
*info
;
522 info
= context
->retransmit_hint
;
524 before(seq
, info
->end_seq
- info
->len
)) {
525 /* if retransmit_hint is irrelevant start
526 * from the beggining of the list
528 info
= list_first_entry(&context
->records_list
,
529 struct tls_record_info
, list
);
530 record_sn
= context
->unacked_record_sn
;
533 list_for_each_entry_from(info
, &context
->records_list
, list
) {
534 if (before(seq
, info
->end_seq
)) {
535 if (!context
->retransmit_hint
||
537 context
->retransmit_hint
->end_seq
)) {
538 context
->hint_record_sn
= record_sn
;
539 context
->retransmit_hint
= info
;
541 *p_record_sn
= record_sn
;
549 EXPORT_SYMBOL(tls_get_record
);
551 static int tls_device_push_pending_record(struct sock
*sk
, int flags
)
553 struct iov_iter msg_iter
;
555 iov_iter_kvec(&msg_iter
, WRITE
, NULL
, 0, 0);
556 return tls_push_data(sk
, &msg_iter
, 0, flags
, TLS_RECORD_TYPE_DATA
);
559 void tls_device_write_space(struct sock
*sk
, struct tls_context
*ctx
)
563 if (!sk
->sk_write_pending
&& tls_is_partially_sent_record(ctx
)) {
564 gfp_t sk_allocation
= sk
->sk_allocation
;
566 sk
->sk_allocation
= GFP_ATOMIC
;
567 rc
= tls_push_partial_record(sk
, ctx
,
568 MSG_DONTWAIT
| MSG_NOSIGNAL
);
569 sk
->sk_allocation
= sk_allocation
;
573 void handle_device_resync(struct sock
*sk
, u32 seq
, u64 rcd_sn
)
575 struct tls_context
*tls_ctx
= tls_get_ctx(sk
);
576 struct net_device
*netdev
= tls_ctx
->netdev
;
577 struct tls_offload_context_rx
*rx_ctx
;
582 if (tls_ctx
->rx_conf
!= TLS_HW
)
585 rx_ctx
= tls_offload_ctx_rx(tls_ctx
);
586 resync_req
= atomic64_read(&rx_ctx
->resync_req
);
587 req_seq
= ntohl(resync_req
>> 32) - ((u32
)TLS_HEADER_SIZE
- 1);
588 is_req_pending
= resync_req
;
590 if (unlikely(is_req_pending
) && req_seq
== seq
&&
591 atomic64_try_cmpxchg(&rx_ctx
->resync_req
, &resync_req
, 0))
592 netdev
->tlsdev_ops
->tls_dev_resync_rx(netdev
, sk
,
593 seq
+ TLS_HEADER_SIZE
- 1,
597 static int tls_device_reencrypt(struct sock
*sk
, struct sk_buff
*skb
)
599 struct strp_msg
*rxm
= strp_msg(skb
);
600 int err
= 0, offset
= rxm
->offset
, copy
, nsg
, data_len
, pos
;
601 struct sk_buff
*skb_iter
, *unused
;
602 struct scatterlist sg
[1];
603 char *orig_buf
, *buf
;
605 orig_buf
= kmalloc(rxm
->full_len
+ TLS_HEADER_SIZE
+
606 TLS_CIPHER_AES_GCM_128_IV_SIZE
, sk
->sk_allocation
);
611 nsg
= skb_cow_data(skb
, 0, &unused
);
612 if (unlikely(nsg
< 0)) {
617 sg_init_table(sg
, 1);
618 sg_set_buf(&sg
[0], buf
,
619 rxm
->full_len
+ TLS_HEADER_SIZE
+
620 TLS_CIPHER_AES_GCM_128_IV_SIZE
);
621 skb_copy_bits(skb
, offset
, buf
,
622 TLS_HEADER_SIZE
+ TLS_CIPHER_AES_GCM_128_IV_SIZE
);
624 /* We are interested only in the decrypted data not the auth */
625 err
= decrypt_skb(sk
, skb
, sg
);
631 data_len
= rxm
->full_len
- TLS_CIPHER_AES_GCM_128_TAG_SIZE
;
633 if (skb_pagelen(skb
) > offset
) {
634 copy
= min_t(int, skb_pagelen(skb
) - offset
, data_len
);
637 skb_store_bits(skb
, offset
, buf
, copy
);
643 pos
= skb_pagelen(skb
);
644 skb_walk_frags(skb
, skb_iter
) {
647 /* Practically all frags must belong to msg if reencrypt
648 * is needed with current strparser and coalescing logic,
649 * but strparser may "get optimized", so let's be safe.
651 if (pos
+ skb_iter
->len
<= offset
)
653 if (pos
>= data_len
+ rxm
->offset
)
656 frag_pos
= offset
- pos
;
657 copy
= min_t(int, skb_iter
->len
- frag_pos
,
658 data_len
+ rxm
->offset
- offset
);
660 if (skb_iter
->decrypted
)
661 skb_store_bits(skb_iter
, frag_pos
, buf
, copy
);
666 pos
+= skb_iter
->len
;
674 int tls_device_decrypted(struct sock
*sk
, struct sk_buff
*skb
)
676 struct tls_context
*tls_ctx
= tls_get_ctx(sk
);
677 struct tls_offload_context_rx
*ctx
= tls_offload_ctx_rx(tls_ctx
);
678 int is_decrypted
= skb
->decrypted
;
679 int is_encrypted
= !is_decrypted
;
680 struct sk_buff
*skb_iter
;
682 /* Skip if it is already decrypted */
683 if (ctx
->sw
.decrypted
)
686 /* Check if all the data is decrypted already */
687 skb_walk_frags(skb
, skb_iter
) {
688 is_decrypted
&= skb_iter
->decrypted
;
689 is_encrypted
&= !skb_iter
->decrypted
;
692 ctx
->sw
.decrypted
|= is_decrypted
;
694 /* Return immedeatly if the record is either entirely plaintext or
695 * entirely ciphertext. Otherwise handle reencrypt partially decrypted
698 return (is_encrypted
|| is_decrypted
) ? 0 :
699 tls_device_reencrypt(sk
, skb
);
702 int tls_set_device_offload(struct sock
*sk
, struct tls_context
*ctx
)
704 u16 nonce_size
, tag_size
, iv_size
, rec_seq_size
;
705 struct tls_context
*tls_ctx
= tls_get_ctx(sk
);
706 struct tls_prot_info
*prot
= &tls_ctx
->prot_info
;
707 struct tls_record_info
*start_marker_record
;
708 struct tls_offload_context_tx
*offload_ctx
;
709 struct tls_crypto_info
*crypto_info
;
710 struct net_device
*netdev
;
719 if (ctx
->priv_ctx_tx
) {
724 start_marker_record
= kmalloc(sizeof(*start_marker_record
), GFP_KERNEL
);
725 if (!start_marker_record
) {
730 offload_ctx
= kzalloc(TLS_OFFLOAD_CONTEXT_SIZE_TX
, GFP_KERNEL
);
733 goto free_marker_record
;
736 crypto_info
= &ctx
->crypto_send
.info
;
737 switch (crypto_info
->cipher_type
) {
738 case TLS_CIPHER_AES_GCM_128
:
739 nonce_size
= TLS_CIPHER_AES_GCM_128_IV_SIZE
;
740 tag_size
= TLS_CIPHER_AES_GCM_128_TAG_SIZE
;
741 iv_size
= TLS_CIPHER_AES_GCM_128_IV_SIZE
;
742 iv
= ((struct tls12_crypto_info_aes_gcm_128
*)crypto_info
)->iv
;
743 rec_seq_size
= TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE
;
745 ((struct tls12_crypto_info_aes_gcm_128
*)crypto_info
)->rec_seq
;
749 goto free_offload_ctx
;
752 prot
->prepend_size
= TLS_HEADER_SIZE
+ nonce_size
;
753 prot
->tag_size
= tag_size
;
754 prot
->overhead_size
= prot
->prepend_size
+ prot
->tag_size
;
755 prot
->iv_size
= iv_size
;
756 ctx
->tx
.iv
= kmalloc(iv_size
+ TLS_CIPHER_AES_GCM_128_SALT_SIZE
,
760 goto free_offload_ctx
;
763 memcpy(ctx
->tx
.iv
+ TLS_CIPHER_AES_GCM_128_SALT_SIZE
, iv
, iv_size
);
765 prot
->rec_seq_size
= rec_seq_size
;
766 ctx
->tx
.rec_seq
= kmemdup(rec_seq
, rec_seq_size
, GFP_KERNEL
);
767 if (!ctx
->tx
.rec_seq
) {
772 rc
= tls_sw_fallback_init(sk
, offload_ctx
, crypto_info
);
776 /* start at rec_seq - 1 to account for the start marker record */
777 memcpy(&rcd_sn
, ctx
->tx
.rec_seq
, sizeof(rcd_sn
));
778 offload_ctx
->unacked_record_sn
= be64_to_cpu(rcd_sn
) - 1;
780 start_marker_record
->end_seq
= tcp_sk(sk
)->write_seq
;
781 start_marker_record
->len
= 0;
782 start_marker_record
->num_frags
= 0;
784 INIT_LIST_HEAD(&offload_ctx
->records_list
);
785 list_add_tail(&start_marker_record
->list
, &offload_ctx
->records_list
);
786 spin_lock_init(&offload_ctx
->lock
);
787 sg_init_table(offload_ctx
->sg_tx_data
,
788 ARRAY_SIZE(offload_ctx
->sg_tx_data
));
790 clean_acked_data_enable(inet_csk(sk
), &tls_icsk_clean_acked
);
791 ctx
->push_pending_record
= tls_device_push_pending_record
;
793 /* TLS offload is greatly simplified if we don't send
794 * SKBs where only part of the payload needs to be encrypted.
795 * So mark the last skb in the write queue as end of record.
797 skb
= tcp_write_queue_tail(sk
);
799 TCP_SKB_CB(skb
)->eor
= 1;
801 /* We support starting offload on multiple sockets
802 * concurrently, so we only need a read lock here.
803 * This lock must precede get_netdev_for_sock to prevent races between
804 * NETDEV_DOWN and setsockopt.
806 down_read(&device_offload_lock
);
807 netdev
= get_netdev_for_sock(sk
);
809 pr_err_ratelimited("%s: netdev not found\n", __func__
);
814 if (!(netdev
->features
& NETIF_F_HW_TLS_TX
)) {
819 /* Avoid offloading if the device is down
820 * We don't want to offload new flows after
821 * the NETDEV_DOWN event
823 if (!(netdev
->flags
& IFF_UP
)) {
828 ctx
->priv_ctx_tx
= offload_ctx
;
829 rc
= netdev
->tlsdev_ops
->tls_dev_add(netdev
, sk
, TLS_OFFLOAD_CTX_DIR_TX
,
830 &ctx
->crypto_send
.info
,
831 tcp_sk(sk
)->write_seq
);
835 tls_device_attach(ctx
, sk
, netdev
);
837 /* following this assignment tls_is_sk_tx_device_offloaded
838 * will return true and the context might be accessed
839 * by the netdev's xmit function.
841 smp_store_release(&sk
->sk_validate_xmit_skb
, tls_validate_xmit_skb
);
843 up_read(&device_offload_lock
);
849 up_read(&device_offload_lock
);
850 clean_acked_data_disable(inet_csk(sk
));
851 crypto_free_aead(offload_ctx
->aead_send
);
853 kfree(ctx
->tx
.rec_seq
);
858 ctx
->priv_ctx_tx
= NULL
;
860 kfree(start_marker_record
);
865 int tls_set_device_offload_rx(struct sock
*sk
, struct tls_context
*ctx
)
867 struct tls_offload_context_rx
*context
;
868 struct net_device
*netdev
;
871 /* We support starting offload on multiple sockets
872 * concurrently, so we only need a read lock here.
873 * This lock must precede get_netdev_for_sock to prevent races between
874 * NETDEV_DOWN and setsockopt.
876 down_read(&device_offload_lock
);
877 netdev
= get_netdev_for_sock(sk
);
879 pr_err_ratelimited("%s: netdev not found\n", __func__
);
884 if (!(netdev
->features
& NETIF_F_HW_TLS_RX
)) {
885 pr_err_ratelimited("%s: netdev %s with no TLS offload\n",
886 __func__
, netdev
->name
);
891 /* Avoid offloading if the device is down
892 * We don't want to offload new flows after
893 * the NETDEV_DOWN event
895 if (!(netdev
->flags
& IFF_UP
)) {
900 context
= kzalloc(TLS_OFFLOAD_CONTEXT_SIZE_RX
, GFP_KERNEL
);
906 ctx
->priv_ctx_rx
= context
;
907 rc
= tls_set_sw_offload(sk
, ctx
, 0);
911 rc
= netdev
->tlsdev_ops
->tls_dev_add(netdev
, sk
, TLS_OFFLOAD_CTX_DIR_RX
,
912 &ctx
->crypto_recv
.info
,
913 tcp_sk(sk
)->copied_seq
);
915 pr_err_ratelimited("%s: The netdev has refused to offload this socket\n",
917 goto free_sw_resources
;
920 tls_device_attach(ctx
, sk
, netdev
);
924 up_read(&device_offload_lock
);
925 tls_sw_free_resources_rx(sk
);
926 down_read(&device_offload_lock
);
928 ctx
->priv_ctx_rx
= NULL
;
932 up_read(&device_offload_lock
);
936 void tls_device_offload_cleanup_rx(struct sock
*sk
)
938 struct tls_context
*tls_ctx
= tls_get_ctx(sk
);
939 struct net_device
*netdev
;
941 down_read(&device_offload_lock
);
942 netdev
= tls_ctx
->netdev
;
946 if (!(netdev
->features
& NETIF_F_HW_TLS_RX
)) {
947 pr_err_ratelimited("%s: device is missing NETIF_F_HW_TLS_RX cap\n",
952 netdev
->tlsdev_ops
->tls_dev_del(netdev
, tls_ctx
,
953 TLS_OFFLOAD_CTX_DIR_RX
);
955 if (tls_ctx
->tx_conf
!= TLS_HW
) {
957 tls_ctx
->netdev
= NULL
;
960 up_read(&device_offload_lock
);
961 tls_sw_release_resources_rx(sk
);
964 static int tls_device_down(struct net_device
*netdev
)
966 struct tls_context
*ctx
, *tmp
;
970 /* Request a write lock to block new offload attempts */
971 down_write(&device_offload_lock
);
973 spin_lock_irqsave(&tls_device_lock
, flags
);
974 list_for_each_entry_safe(ctx
, tmp
, &tls_device_list
, list
) {
975 if (ctx
->netdev
!= netdev
||
976 !refcount_inc_not_zero(&ctx
->refcount
))
979 list_move(&ctx
->list
, &list
);
981 spin_unlock_irqrestore(&tls_device_lock
, flags
);
983 list_for_each_entry_safe(ctx
, tmp
, &list
, list
) {
984 if (ctx
->tx_conf
== TLS_HW
)
985 netdev
->tlsdev_ops
->tls_dev_del(netdev
, ctx
,
986 TLS_OFFLOAD_CTX_DIR_TX
);
987 if (ctx
->rx_conf
== TLS_HW
)
988 netdev
->tlsdev_ops
->tls_dev_del(netdev
, ctx
,
989 TLS_OFFLOAD_CTX_DIR_RX
);
992 list_del_init(&ctx
->list
);
994 if (refcount_dec_and_test(&ctx
->refcount
))
995 tls_device_free_ctx(ctx
);
998 up_write(&device_offload_lock
);
1000 flush_work(&tls_device_gc_work
);
1005 static int tls_dev_event(struct notifier_block
*this, unsigned long event
,
1008 struct net_device
*dev
= netdev_notifier_info_to_dev(ptr
);
1010 if (!(dev
->features
& (NETIF_F_HW_TLS_RX
| NETIF_F_HW_TLS_TX
)))
1014 case NETDEV_REGISTER
:
1015 case NETDEV_FEAT_CHANGE
:
1016 if ((dev
->features
& NETIF_F_HW_TLS_RX
) &&
1017 !dev
->tlsdev_ops
->tls_dev_resync_rx
)
1020 if (dev
->tlsdev_ops
&&
1021 dev
->tlsdev_ops
->tls_dev_add
&&
1022 dev
->tlsdev_ops
->tls_dev_del
)
1027 return tls_device_down(dev
);
1032 static struct notifier_block tls_dev_notifier
= {
1033 .notifier_call
= tls_dev_event
,
1036 void __init
tls_device_init(void)
1038 register_netdevice_notifier(&tls_dev_notifier
);
1041 void __exit
tls_device_cleanup(void)
1043 unregister_netdevice_notifier(&tls_dev_notifier
);
1044 flush_work(&tls_device_gc_work
);