diff options
Diffstat (limited to 'drivers/net/ethernet/mediatek/mtk_eth_soc.c')
| -rw-r--r-- | drivers/net/ethernet/mediatek/mtk_eth_soc.c | 8 | 
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c index 6ad42e3b488f..3cffd1bd3067 100644 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c @@ -2005,11 +2005,11 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,  	u8 *data, *new_data;  	struct mtk_rx_dma_v2 *rxd, trxd;  	int done = 0, bytes = 0; +	dma_addr_t dma_addr = DMA_MAPPING_ERROR;  	while (done < budget) {  		unsigned int pktlen, *rxdcsum;  		struct net_device *netdev; -		dma_addr_t dma_addr;  		u32 hash, reason;  		int mac = 0; @@ -2186,7 +2186,8 @@ release_desc:  		else  			rxd->rxd2 = RX_DMA_PREP_PLEN0(ring->buf_size); -		if (MTK_HAS_CAPS(eth->soc->caps, MTK_36BIT_DMA)) +		if (MTK_HAS_CAPS(eth->soc->caps, MTK_36BIT_DMA) && +		    likely(dma_addr != DMA_MAPPING_ERROR))  			rxd->rxd2 |= RX_DMA_PREP_ADDR64(dma_addr);  		ring->calc_idx = idx; @@ -2994,6 +2995,9 @@ static int mtk_hwlro_get_fdir_all(struct net_device *dev,  	int i;  	for (i = 0; i < MTK_MAX_LRO_IP_CNT; i++) { +		if (cnt == cmd->rule_cnt) +			return -EMSGSIZE; +  		if (mac->hwlro_ip[i]) {  			rule_locs[cnt] = i;  			cnt++;  | 
