diff options
Diffstat (limited to 'net/tls/tls_device.c')
| -rw-r--r-- | net/tls/tls_device.c | 22 | 
1 files changed, 8 insertions, 14 deletions
diff --git a/net/tls/tls_device.c b/net/tls/tls_device.c index a7cc4f9faac2..bf69c9d6d06c 100644 --- a/net/tls/tls_device.c +++ b/net/tls/tls_device.c @@ -1007,20 +1007,14 @@ int tls_device_decrypted(struct sock *sk, struct tls_context *tls_ctx)  	struct tls_sw_context_rx *sw_ctx = tls_sw_ctx_rx(tls_ctx);  	struct sk_buff *skb = tls_strp_msg(sw_ctx);  	struct strp_msg *rxm = strp_msg(skb); -	int is_decrypted = skb->decrypted; -	int is_encrypted = !is_decrypted; -	struct sk_buff *skb_iter; -	int left; - -	left = rxm->full_len - skb->len; -	/* Check if all the data is decrypted already */ -	skb_iter = skb_shinfo(skb)->frag_list; -	while (skb_iter && left > 0) { -		is_decrypted &= skb_iter->decrypted; -		is_encrypted &= !skb_iter->decrypted; - -		left -= skb_iter->len; -		skb_iter = skb_iter->next; +	int is_decrypted, is_encrypted; + +	if (!tls_strp_msg_mixed_decrypted(sw_ctx)) { +		is_decrypted = skb->decrypted; +		is_encrypted = !is_decrypted; +	} else { +		is_decrypted = 0; +		is_encrypted = 0;  	}  	trace_tls_device_decrypted(sk, tcp_sk(sk)->copied_seq - rxm->full_len,  |