Skip to content

Commit 2a5a259

Browse files
committed
Merge branch 'sh_eth-fixes'
Sergei Shtylyov says: ==================== sh_eth: fix couple of bugs in sh_eth_ring_format() Here's a set of 2 patches against DaveM's 'net.git' repo fixing two bugs in sh_eth_.ring_format()... [1/2] sh_eth: fix NULL pointer dereference in sh_eth_ring_format() [2/2] sh_eth: advance 'rxdesc' later in sh_eth_ring_format() ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents f720d0c + d0ba913 commit 2a5a259

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

drivers/net/ethernet/renesas/sh_eth.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1127,18 +1127,19 @@ static void sh_eth_ring_format(struct net_device *ndev)
11271127
break;
11281128
sh_eth_set_receive_align(skb);
11291129

1130-
/* RX descriptor */
1131-
rxdesc = &mdp->rx_ring[i];
11321130
/* The size of the buffer is a multiple of 32 bytes. */
11331131
buf_len = ALIGN(mdp->rx_buf_sz, 32);
1134-
rxdesc->len = cpu_to_le32(buf_len << 16);
11351132
dma_addr = dma_map_single(&ndev->dev, skb->data, buf_len,
11361133
DMA_FROM_DEVICE);
11371134
if (dma_mapping_error(&ndev->dev, dma_addr)) {
11381135
kfree_skb(skb);
11391136
break;
11401137
}
11411138
mdp->rx_skbuff[i] = skb;
1139+
1140+
/* RX descriptor */
1141+
rxdesc = &mdp->rx_ring[i];
1142+
rxdesc->len = cpu_to_le32(buf_len << 16);
11421143
rxdesc->addr = cpu_to_le32(dma_addr);
11431144
rxdesc->status = cpu_to_le32(RD_RACT | RD_RFP);
11441145

@@ -1154,7 +1155,8 @@ static void sh_eth_ring_format(struct net_device *ndev)
11541155
mdp->dirty_rx = (u32) (i - mdp->num_rx_ring);
11551156

11561157
/* Mark the last entry as wrapping the ring. */
1157-
rxdesc->status |= cpu_to_le32(RD_RDLE);
1158+
if (rxdesc)
1159+
rxdesc->status |= cpu_to_le32(RD_RDLE);
11581160

11591161
memset(mdp->tx_ring, 0, tx_ringsize);
11601162

0 commit comments

Comments
 (0)