|
@@ -667,8 +667,16 @@ static void rt2800usb_fill_rxdone(struct queue_entry *entry,
|
|
|
skb_pull(entry->skb, RXINFO_DESC_SIZE);
|
|
|
|
|
|
/*
|
|
|
- * FIXME: we need to check for rx_pkt_len validity
|
|
|
+ * Check for rx_pkt_len validity. Return if invalid, leaving
|
|
|
+ * rxdesc->size zeroed out by the upper level.
|
|
|
*/
|
|
|
+ if (unlikely(rx_pkt_len == 0 ||
|
|
|
+ rx_pkt_len > entry->queue->data_size)) {
|
|
|
+ ERROR(entry->queue->rt2x00dev,
|
|
|
+ "Bad frame size %d, forcing to 0\n", rx_pkt_len);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
rxd = (__le32 *)(entry->skb->data + rx_pkt_len);
|
|
|
|
|
|
/*
|