Skip to content

Commit 637d3e9

Browse files
Hariprasad Shenaidavem330
authored andcommitted
cxgb4: Discard the packet if the length is greater than mtu
pktgen sends raw udp packets and bypasses most of the linux networking stack. User can specify different packet sizes. Hence we need to discard the packet if the length is greater than mtu Signed-off-by: Hariprasad Shenai <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent a3bfb61 commit 637d3e9

File tree

2 files changed

+16
-2
lines changed
  • drivers/net/ethernet/chelsio

2 files changed

+16
-2
lines changed

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1120,7 +1120,6 @@ cxgb_fcoe_offload(struct sk_buff *skb, struct adapter *adap,
11201120
*/
11211121
netdev_tx_t t4_eth_xmit(struct sk_buff *skb, struct net_device *dev)
11221122
{
1123-
int len;
11241123
u32 wr_mid;
11251124
u64 cntrl, *end;
11261125
int qidx, credits;
@@ -1133,6 +1132,7 @@ netdev_tx_t t4_eth_xmit(struct sk_buff *skb, struct net_device *dev)
11331132
const struct skb_shared_info *ssi;
11341133
dma_addr_t addr[MAX_SKB_FRAGS + 1];
11351134
bool immediate = false;
1135+
int len, max_pkt_len;
11361136
#ifdef CONFIG_CHELSIO_T4_FCOE
11371137
int err;
11381138
#endif /* CONFIG_CHELSIO_T4_FCOE */
@@ -1146,6 +1146,13 @@ out_free: dev_kfree_skb_any(skb);
11461146
return NETDEV_TX_OK;
11471147
}
11481148

1149+
/* Discard the packet if the length is greater than mtu */
1150+
max_pkt_len = ETH_HLEN + dev->mtu;
1151+
if (skb_vlan_tag_present(skb))
1152+
max_pkt_len += VLAN_HLEN;
1153+
if (!skb_shinfo(skb)->gso_size && (unlikely(skb->len > max_pkt_len)))
1154+
goto out_free;
1155+
11491156
pi = netdev_priv(dev);
11501157
adap = pi->adapter;
11511158
qidx = skb_get_queue_mapping(skb);

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1160,7 +1160,7 @@ int t4vf_eth_xmit(struct sk_buff *skb, struct net_device *dev)
11601160
{
11611161
u32 wr_mid;
11621162
u64 cntrl, *end;
1163-
int qidx, credits;
1163+
int qidx, credits, max_pkt_len;
11641164
unsigned int flits, ndesc;
11651165
struct adapter *adapter;
11661166
struct sge_eth_txq *txq;
@@ -1183,6 +1183,13 @@ int t4vf_eth_xmit(struct sk_buff *skb, struct net_device *dev)
11831183
if (unlikely(skb->len < fw_hdr_copy_len))
11841184
goto out_free;
11851185

1186+
/* Discard the packet if the length is greater than mtu */
1187+
max_pkt_len = ETH_HLEN + dev->mtu;
1188+
if (skb_vlan_tag_present(skb))
1189+
max_pkt_len += VLAN_HLEN;
1190+
if (!skb_shinfo(skb)->gso_size && (unlikely(skb->len > max_pkt_len)))
1191+
goto out_free;
1192+
11861193
/*
11871194
* Figure out which TX Queue we're going to use.
11881195
*/

0 commit comments

Comments
 (0)