mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
KS8851: NULL pointer dereference if list is empty
Fix NULL pointer dereference in ks8851_tx_work by checking if dequeued list is already empty before writing the packet to TX FIFO Unable to handle kernel NULL pointer dereference at virtual address 00000050 PC is at ks8851_tx_work+0xdc/0x1b0 LR is at wait_for_common+0x148/0x164 pc : [<c01c0df4>] lr : [<c025a980>] psr: 20000013 Backtrace: ks8851_tx_work+0x0/0x1b0 worker_thread+0x0/0x190 kthread+0x0/0x90 Signed-off-by: Abraham Arce <x0066660@ti.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
df245dce57
commit
761172fbf6
@ -722,12 +722,14 @@ static void ks8851_tx_work(struct work_struct *work)
|
||||
txb = skb_dequeue(&ks->txq);
|
||||
last = skb_queue_empty(&ks->txq);
|
||||
|
||||
ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr | RXQCR_SDA);
|
||||
ks8851_wrpkt(ks, txb, last);
|
||||
ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr);
|
||||
ks8851_wrreg16(ks, KS_TXQCR, TXQCR_METFE);
|
||||
if (txb != NULL) {
|
||||
ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr | RXQCR_SDA);
|
||||
ks8851_wrpkt(ks, txb, last);
|
||||
ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr);
|
||||
ks8851_wrreg16(ks, KS_TXQCR, TXQCR_METFE);
|
||||
|
||||
ks8851_done_tx(ks, txb);
|
||||
ks8851_done_tx(ks, txb);
|
||||
}
|
||||
}
|
||||
|
||||
mutex_unlock(&ks->lock);
|
||||
|
Loading…
Reference in New Issue
Block a user