tcp: Don't coalesce decrypted and encrypted SKBs
Prevent coalescing of decrypted and encrypted SKBs in GRO and TCP layer. Signed-off-by: Boris Pismenny <borisp@mellanox.com> Signed-off-by: Ilya Lesokhin <ilyal@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
16e4edc297
commit
41ed9c04aa
2 changed files with 15 additions and 0 deletions
|
@ -4343,6 +4343,11 @@ static bool tcp_try_coalesce(struct sock *sk,
|
|||
if (TCP_SKB_CB(from)->seq != TCP_SKB_CB(to)->end_seq)
|
||||
return false;
|
||||
|
||||
#ifdef CONFIG_TLS_DEVICE
|
||||
if (from->decrypted != to->decrypted)
|
||||
return false;
|
||||
#endif
|
||||
|
||||
if (!skb_try_coalesce(to, from, fragstolen, &delta))
|
||||
return false;
|
||||
|
||||
|
@ -4871,6 +4876,9 @@ tcp_collapse(struct sock *sk, struct sk_buff_head *list, struct rb_root *root,
|
|||
break;
|
||||
|
||||
memcpy(nskb->cb, skb->cb, sizeof(skb->cb));
|
||||
#ifdef CONFIG_TLS_DEVICE
|
||||
nskb->decrypted = skb->decrypted;
|
||||
#endif
|
||||
TCP_SKB_CB(nskb)->seq = TCP_SKB_CB(nskb)->end_seq = start;
|
||||
if (list)
|
||||
__skb_queue_before(list, skb, nskb);
|
||||
|
@ -4898,6 +4906,10 @@ tcp_collapse(struct sock *sk, struct sk_buff_head *list, struct rb_root *root,
|
|||
skb == tail ||
|
||||
(TCP_SKB_CB(skb)->tcp_flags & (TCPHDR_SYN | TCPHDR_FIN)))
|
||||
goto end;
|
||||
#ifdef CONFIG_TLS_DEVICE
|
||||
if (skb->decrypted != nskb->decrypted)
|
||||
goto end;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -262,6 +262,9 @@ struct sk_buff *tcp_gro_receive(struct list_head *head, struct sk_buff *skb)
|
|||
|
||||
flush |= (len - 1) >= mss;
|
||||
flush |= (ntohl(th2->seq) + skb_gro_len(p)) ^ ntohl(th->seq);
|
||||
#ifdef CONFIG_TLS_DEVICE
|
||||
flush |= p->decrypted ^ skb->decrypted;
|
||||
#endif
|
||||
|
||||
if (flush || skb_gro_receive(p, skb)) {
|
||||
mss = 1;
|
||||
|
|
Loading…
Reference in a new issue