diff options
author | Roger While <simrw@sim-basis.de> | 2005-10-28 16:11:49 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-10-28 16:11:49 -0400 |
commit | 008d55903a1e9e179ff1d366dfcfa9b72abd116d (patch) | |
tree | f4013eacc57d2395ceda2f2c46823845dc7cf3c2 | |
parent | d89a64bedf956ef0b406018a7cb76e027fe3e751 (diff) |
[wireless prism54] Fix frame length
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>
-rw-r--r-- | drivers/net/wireless/prism54/islpci_eth.c | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/drivers/net/wireless/prism54/islpci_eth.c b/drivers/net/wireless/prism54/islpci_eth.c index 5952e9960499..0975dd4ed77d 100644 --- a/drivers/net/wireless/prism54/islpci_eth.c +++ b/drivers/net/wireless/prism54/islpci_eth.c | |||
@@ -97,12 +97,6 @@ islpci_eth_transmit(struct sk_buff *skb, struct net_device *ndev) | |||
97 | /* lock the driver code */ | 97 | /* lock the driver code */ |
98 | spin_lock_irqsave(&priv->slock, flags); | 98 | spin_lock_irqsave(&priv->slock, flags); |
99 | 99 | ||
100 | /* determine the amount of fragments needed to store the frame */ | ||
101 | |||
102 | frame_size = skb->len < ETH_ZLEN ? ETH_ZLEN : skb->len; | ||
103 | if (init_wds) | ||
104 | frame_size += 6; | ||
105 | |||
106 | /* check whether the destination queue has enough fragments for the frame */ | 100 | /* check whether the destination queue has enough fragments for the frame */ |
107 | curr_frag = le32_to_cpu(cb->driver_curr_frag[ISL38XX_CB_TX_DATA_LQ]); | 101 | curr_frag = le32_to_cpu(cb->driver_curr_frag[ISL38XX_CB_TX_DATA_LQ]); |
108 | if (unlikely(curr_frag - priv->free_data_tx >= ISL38XX_CB_TX_QSIZE)) { | 102 | 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) | |||
213 | /* store the skb address for future freeing */ | 207 | /* store the skb address for future freeing */ |
214 | priv->data_low_tx[index] = skb; | 208 | priv->data_low_tx[index] = skb; |
215 | /* set the proper fragment start address and size information */ | 209 | /* set the proper fragment start address and size information */ |
210 | frame_size = skb->len; | ||
216 | fragment->size = cpu_to_le16(frame_size); | 211 | fragment->size = cpu_to_le16(frame_size); |
217 | fragment->flags = cpu_to_le16(0); /* set to 1 if more fragments */ | 212 | fragment->flags = cpu_to_le16(0); /* set to 1 if more fragments */ |
218 | fragment->address = cpu_to_le32(pci_map_address); | 213 | fragment->address = cpu_to_le32(pci_map_address); |