Skip to content

Commit 9d2e5e9

Browse files
rmchelsiokuba-moo
authored andcommitted
cxgb4/ch_ktls: decrypted bit is not enough
If skb has retransmit data starting before start marker, e.g. ccs, decrypted bit won't be set for that, and if it has some data to encrypt, then it must be given to crypto ULD. So in place of decrypted, check if socket is tls offloaded. Also, unless skb has some data to encrypt, no need to give it for tls offload handling. v2->v3: - Removed ifdef. Fixes: 5a4b9fe ("cxgb4/chcr: complete record tx handling") Signed-off-by: Rohit Maheshwari <[email protected]> Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 3611823 commit 9d2e5e9

File tree

4 files changed

+8
-5
lines changed

4 files changed

+8
-5
lines changed

drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,6 +1176,7 @@ static u16 cxgb_select_queue(struct net_device *dev, struct sk_buff *skb,
11761176
txq = netdev_pick_tx(dev, skb, sb_dev);
11771177
if (xfrm_offload(skb) || is_ptp_enabled(skb, dev) ||
11781178
skb->encapsulation ||
1179+
cxgb4_is_ktls_skb(skb) ||
11791180
(proto != IPPROTO_TCP && proto != IPPROTO_UDP))
11801181
txq = txq % pi->nqsets;
11811182

drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,11 @@ struct cxgb4_uld_info {
493493
#endif
494494
};
495495

496+
static inline bool cxgb4_is_ktls_skb(struct sk_buff *skb)
497+
{
498+
return skb->sk && tls_is_sk_tx_device_offloaded(skb->sk);
499+
}
500+
496501
void cxgb4_uld_enable(struct adapter *adap);
497502
void cxgb4_register_uld(enum cxgb4_uld type, const struct cxgb4_uld_info *p);
498503
int cxgb4_unregister_uld(enum cxgb4_uld type);

drivers/net/ethernet/chelsio/cxgb4/sge.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1422,7 +1422,8 @@ static netdev_tx_t cxgb4_eth_xmit(struct sk_buff *skb, struct net_device *dev)
14221422
#endif /* CHELSIO_IPSEC_INLINE */
14231423

14241424
#if IS_ENABLED(CONFIG_CHELSIO_TLS_DEVICE)
1425-
if (skb->decrypted)
1425+
if (cxgb4_is_ktls_skb(skb) &&
1426+
(skb->len - (skb_transport_offset(skb) + tcp_hdrlen(skb))))
14261427
return adap->uld[CXGB4_ULD_KTLS].tx_handler(skb, dev);
14271428
#endif /* CHELSIO_TLS_DEVICE */
14281429

drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1878,10 +1878,6 @@ static int chcr_ktls_xmit(struct sk_buff *skb, struct net_device *dev)
18781878

18791879
mss = skb_is_gso(skb) ? skb_shinfo(skb)->gso_size : skb->data_len;
18801880

1881-
/* check if we haven't set it for ktls offload */
1882-
if (!skb->sk || !tls_is_sk_tx_device_offloaded(skb->sk))
1883-
goto out;
1884-
18851881
tls_ctx = tls_get_ctx(skb->sk);
18861882
if (unlikely(tls_ctx->netdev != dev))
18871883
goto out;

0 commit comments

Comments
 (0)