diff options
author | Mattias Nissler <mattias.nissler@gmx.de> | 2008-08-29 15:07:20 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-08-29 16:24:12 -0400 |
commit | 1abc3656e961e62218257a85b3fe0a90ccd9036c (patch) | |
tree | 903167b49da4b96044f52bf42e4574a04e569662 /drivers/net/wireless/rt2x00 | |
parent | 6c6aa3c004e702532cb0f549a96eb2f75636bd3b (diff) |
rt2x00: skb->data pointer should not include TX descriptor
Make sure the skb->data pointer points to the frame data, not the TX
descriptor. The frame dumping code relies on that.
Signed-off-by: Mattias Nissler <mattias.nissler@gmx.de>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2500usb.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00usb.c | 11 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt73usb.c | 3 |
3 files changed, 8 insertions, 9 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c index c5f49e36559a..0e008b606f70 100644 --- a/drivers/net/wireless/rt2x00/rt2500usb.c +++ b/drivers/net/wireless/rt2x00/rt2500usb.c | |||
@@ -1114,8 +1114,7 @@ static void rt2500usb_write_tx_desc(struct rt2x00_dev *rt2x00dev, | |||
1114 | rt2x00_set_field32(&word, TXD_W0_NEW_SEQ, | 1114 | rt2x00_set_field32(&word, TXD_W0_NEW_SEQ, |
1115 | test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags)); | 1115 | test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags)); |
1116 | rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs); | 1116 | rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs); |
1117 | rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, | 1117 | rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, skb->len); |
1118 | skb->len - skbdesc->desc_len); | ||
1119 | rt2x00_set_field32(&word, TXD_W0_CIPHER, CIPHER_NONE); | 1118 | rt2x00_set_field32(&word, TXD_W0_CIPHER, CIPHER_NONE); |
1120 | rt2x00_desc_write(txd, 0, word); | 1119 | rt2x00_desc_write(txd, 0, word); |
1121 | } | 1120 | } |
diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c b/drivers/net/wireless/rt2x00/rt2x00usb.c index 2dd7c830c125..b73a7e0aeed4 100644 --- a/drivers/net/wireless/rt2x00/rt2x00usb.c +++ b/drivers/net/wireless/rt2x00/rt2x00usb.c | |||
@@ -168,11 +168,6 @@ static void rt2x00usb_interrupt_txdone(struct urb *urb) | |||
168 | return; | 168 | return; |
169 | 169 | ||
170 | /* | 170 | /* |
171 | * Remove the descriptor data from the buffer. | ||
172 | */ | ||
173 | skb_pull(entry->skb, entry->queue->desc_size); | ||
174 | |||
175 | /* | ||
176 | * Obtain the status about this packet. | 171 | * Obtain the status about this packet. |
177 | * Note that when the status is 0 it does not mean the | 172 | * Note that when the status is 0 it does not mean the |
178 | * frame was send out correctly. It only means the frame | 173 | * frame was send out correctly. It only means the frame |
@@ -224,6 +219,12 @@ int rt2x00usb_write_tx_data(struct queue_entry *entry) | |||
224 | entry->skb->data, length, | 219 | entry->skb->data, length, |
225 | rt2x00usb_interrupt_txdone, entry); | 220 | rt2x00usb_interrupt_txdone, entry); |
226 | 221 | ||
222 | /* | ||
223 | * Make sure the skb->data pointer points to the frame, not the | ||
224 | * descriptor. | ||
225 | */ | ||
226 | skb_pull(entry->skb, entry->queue->desc_size); | ||
227 | |||
227 | return 0; | 228 | return 0; |
228 | } | 229 | } |
229 | EXPORT_SYMBOL_GPL(rt2x00usb_write_tx_data); | 230 | EXPORT_SYMBOL_GPL(rt2x00usb_write_tx_data); |
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c index cf236ec533a9..e698ae0efbce 100644 --- a/drivers/net/wireless/rt2x00/rt73usb.c +++ b/drivers/net/wireless/rt2x00/rt73usb.c | |||
@@ -1556,8 +1556,7 @@ static void rt73usb_write_tx_desc(struct rt2x00_dev *rt2x00dev, | |||
1556 | rt2x00_set_field32(&word, TXD_W0_KEY_TABLE, | 1556 | rt2x00_set_field32(&word, TXD_W0_KEY_TABLE, |
1557 | test_bit(ENTRY_TXD_ENCRYPT_PAIRWISE, &txdesc->flags)); | 1557 | test_bit(ENTRY_TXD_ENCRYPT_PAIRWISE, &txdesc->flags)); |
1558 | rt2x00_set_field32(&word, TXD_W0_KEY_INDEX, txdesc->key_idx); | 1558 | rt2x00_set_field32(&word, TXD_W0_KEY_INDEX, txdesc->key_idx); |
1559 | rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, | 1559 | rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, skb->len); |
1560 | skb->len - skbdesc->desc_len); | ||
1561 | rt2x00_set_field32(&word, TXD_W0_BURST2, | 1560 | rt2x00_set_field32(&word, TXD_W0_BURST2, |
1562 | test_bit(ENTRY_TXD_BURST, &txdesc->flags)); | 1561 | test_bit(ENTRY_TXD_BURST, &txdesc->flags)); |
1563 | rt2x00_set_field32(&word, TXD_W0_CIPHER_ALG, txdesc->cipher); | 1562 | rt2x00_set_field32(&word, TXD_W0_CIPHER_ALG, txdesc->cipher); |