[wireless prism54] Fix frame length
authorRoger While <simrw@sim-basis.de>
Fri, 28 Oct 2005 20:11:49 +0000 (16:11 -0400)
committerJeff Garzik <jgarzik@pobox.com>
Fri, 28 Oct 2005 20:11:49 +0000 (16:11 -0400)
prism54 is leaking information when passing transmits to the firmware.
There is no requirement to adjust the length to >= ETH_ZLEN.
Just pass the skb length (after possible adjustment).

Signed-off-by: Roger While <simrw@sim-basis.de>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
drivers/net/wireless/prism54/islpci_eth.c

index 5952e99604991451650165bae75f1bb3227c6657..0975dd4ed77d1008d99487fa4f14265d0c446f68 100644 (file)
@@ -97,12 +97,6 @@ islpci_eth_transmit(struct sk_buff *skb, struct net_device *ndev)
        /* lock the driver code */
        spin_lock_irqsave(&priv->slock, flags);
 
-       /* determine the amount of fragments needed to store the frame */
-
-       frame_size = skb->len < ETH_ZLEN ? ETH_ZLEN : skb->len;
-       if (init_wds)
-               frame_size += 6;
-
        /* check whether the destination queue has enough fragments for the frame */
        curr_frag = le32_to_cpu(cb->driver_curr_frag[ISL38XX_CB_TX_DATA_LQ]);
        if (unlikely(curr_frag - priv->free_data_tx >= ISL38XX_CB_TX_QSIZE)) {
@@ -213,6 +207,7 @@ islpci_eth_transmit(struct sk_buff *skb, struct net_device *ndev)
        /* store the skb address for future freeing  */
        priv->data_low_tx[index] = skb;
        /* set the proper fragment start address and size information */
+       frame_size = skb->len;
        fragment->size = cpu_to_le16(frame_size);
        fragment->flags = cpu_to_le16(0);       /* set to 1 if more fragments */
        fragment->address = cpu_to_le32(pci_map_address);