Hi,
that's the inline version:
-------
mac80211 is checking is the skb is aligned on 32 bit boundary.
But it is checking against ethernet header, whereas Linux expect IP
header aligned.
And ethernet ether size is 6*2+2=14, so aligning ethernet header make
IP header unaligned.
Signed-off-by: Matthieu CASTET <[email protected]>
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 9776f73..0845fb3 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1397,7 +1397,7 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
* mac80211. That also explains the __skb_push()
* below.
*/
- align = (unsigned long)skb->data & 3;
+ align = ((unsigned long)(skb->data + sizeof(struct ethhdr))) & 3;
if (align) {
if (WARN_ON(skb_headroom(skb) < 3)) {
dev_kfree_skb(skb);
------------
On Thu, Jun 4, 2009 at 5:53 PM, Luis R. Rodriguez <[email protected]> wrote:
> On Thu, Jun 4, 2009 at 1:16 PM, matthieu castet <[email protected]> wrote:
>>
>
> This is all I see, can you resend with patch inline?
>
> Luis
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
Georgy Berdyshev
GPG key: 830F68C5
Fingerprint: 0379 ED5A BEE5 65A8 7BD5 31E7 F5B4 1EC7 830F 68C5
matthieu castet wrote:
> Michael Buesch wrote:
>> On Thursday 04 June 2009 23:16:13 Georgy Berdyshev wrote:
>>> Hi,
>>>
>>> that's the inline version:
>>> -------
>>> mac80211 is checking is the skb is aligned on 32 bit boundary.
>>> But it is checking against ethernet header, whereas Linux expect IP
>>> header aligned.
>>> And ethernet ether size is 6*2+2=14, so aligning ethernet header make
>>> IP header unaligned.
>>>
>>> Signed-off-by: Matthieu CASTET <[email protected]>
>>> diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
>>> index 9776f73..0845fb3 100644
>>> --- a/net/mac80211/rx.c
>>> +++ b/net/mac80211/rx.c
>>> @@ -1397,7 +1397,7 @@ ieee80211_deliver_skb(struct ieee80211_rx_data
>>> *rx)
>>> * mac80211. That also explains the __skb_push()
>>> * below.
>>> */
>>> - align = (unsigned long)skb->data & 3;
>>> + align = ((unsigned long)(skb->data + sizeof(struct ethhdr)))
>>> & 3;
>>> if (align) {
>>> if (WARN_ON(skb_headroom(skb) < 3)) {
>>> dev_kfree_skb(skb);
>>
>> Uhm, can you give a more verbose explanation? Without that I'd say
>> this patch is plain wrong.
>> What the hell does struct ethhdr have to do with wireless?
> > This is not ethernet. It's 802.11. There is no such thing as an
> > ethernet header in a 802.11 packet.
> >
> Where are in ieee80211_deliver_skb that is called after
> ieee80211_data_to_8023. So it is not 802.11.
>
Do you want more explanation ?
Matthieu
On Sun, Jun 07, 2009 at 11:26:22AM +0200, Michael Buesch wrote:
> On Sunday 07 June 2009 11:24:48 matthieu castet wrote:
> > matthieu castet wrote:
> > > Where are in ieee80211_deliver_skb that is called after
> > > ieee80211_data_to_8023. So it is not 802.11.
> > >
> > Do you want more explanation ?
>
> No reply always means "ok" on this list ;)
Probably true...however, I was hoping to see an ACK from Johannes...
John
--
John W. Linville Someday the world will need a hero, and you
[email protected] might be all we have. Be ready.
Michael Buesch wrote:
> On Thursday 04 June 2009 23:16:13 Georgy Berdyshev wrote:
>> Hi,
>>
>> that's the inline version:
>> -------
>> mac80211 is checking is the skb is aligned on 32 bit boundary.
>> But it is checking against ethernet header, whereas Linux expect IP
>> header aligned.
>> And ethernet ether size is 6*2+2=14, so aligning ethernet header make
>> IP header unaligned.
>>
>> Signed-off-by: Matthieu CASTET <[email protected]>
>> diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
>> index 9776f73..0845fb3 100644
>> --- a/net/mac80211/rx.c
>> +++ b/net/mac80211/rx.c
>> @@ -1397,7 +1397,7 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
>> * mac80211. That also explains the __skb_push()
>> * below.
>> */
>> - align = (unsigned long)skb->data & 3;
>> + align = ((unsigned long)(skb->data + sizeof(struct ethhdr))) & 3;
>> if (align) {
>> if (WARN_ON(skb_headroom(skb) < 3)) {
>> dev_kfree_skb(skb);
>
> Uhm, can you give a more verbose explanation? Without that I'd say this patch is plain wrong.
> What the hell does struct ethhdr have to do with wireless?
> This is not ethernet. It's 802.11. There is no such thing as an
> ethernet header in a 802.11 packet.
>
Where are in ieee80211_deliver_skb that is called after
ieee80211_data_to_8023. So it is not 802.11.
Matthieu
On Thursday 04 June 2009 23:16:13 Georgy Berdyshev wrote:
> Hi,
>
> that's the inline version:
> -------
> mac80211 is checking is the skb is aligned on 32 bit boundary.
> But it is checking against ethernet header, whereas Linux expect IP
> header aligned.
> And ethernet ether size is 6*2+2=14, so aligning ethernet header make
> IP header unaligned.
>
> Signed-off-by: Matthieu CASTET <[email protected]>
> diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
> index 9776f73..0845fb3 100644
> --- a/net/mac80211/rx.c
> +++ b/net/mac80211/rx.c
> @@ -1397,7 +1397,7 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
> * mac80211. That also explains the __skb_push()
> * below.
> */
> - align = (unsigned long)skb->data & 3;
> + align = ((unsigned long)(skb->data + sizeof(struct ethhdr))) & 3;
> if (align) {
> if (WARN_ON(skb_headroom(skb) < 3)) {
> dev_kfree_skb(skb);
Uhm, can you give a more verbose explanation? Without that I'd say this patch is plain wrong.
What the hell does struct ethhdr have to do with wireless?
This is not ethernet. It's 802.11. There is no such thing as an ethernet header in a 802.11 packet.
--
Greetings, Michael.
On Sunday 07 June 2009 11:24:48 matthieu castet wrote:
> matthieu castet wrote:
> > Michael Buesch wrote:
> >> On Thursday 04 June 2009 23:16:13 Georgy Berdyshev wrote:
> >>> Hi,
> >>>
> >>> that's the inline version:
> >>> -------
> >>> mac80211 is checking is the skb is aligned on 32 bit boundary.
> >>> But it is checking against ethernet header, whereas Linux expect IP
> >>> header aligned.
> >>> And ethernet ether size is 6*2+2=14, so aligning ethernet header make
> >>> IP header unaligned.
> >>>
> >>> Signed-off-by: Matthieu CASTET <[email protected]>
> >>> diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
> >>> index 9776f73..0845fb3 100644
> >>> --- a/net/mac80211/rx.c
> >>> +++ b/net/mac80211/rx.c
> >>> @@ -1397,7 +1397,7 @@ ieee80211_deliver_skb(struct ieee80211_rx_data
> >>> *rx)
> >>> * mac80211. That also explains the __skb_push()
> >>> * below.
> >>> */
> >>> - align = (unsigned long)skb->data & 3;
> >>> + align = ((unsigned long)(skb->data + sizeof(struct ethhdr)))
> >>> & 3;
> >>> if (align) {
> >>> if (WARN_ON(skb_headroom(skb) < 3)) {
> >>> dev_kfree_skb(skb);
> >>
> >> Uhm, can you give a more verbose explanation? Without that I'd say
> >> this patch is plain wrong.
> >> What the hell does struct ethhdr have to do with wireless?
> > > This is not ethernet. It's 802.11. There is no such thing as an
> > > ethernet header in a 802.11 packet.
> > >
> > Where are in ieee80211_deliver_skb that is called after
> > ieee80211_data_to_8023. So it is not 802.11.
> >
> Do you want more explanation ?
No reply always means "ok" on this list ;)
--
Greetings, Michael.
On Thu, Jun 4, 2009 at 1:16 PM, matthieu castet <[email protected]> wrote:
>
This is all I see, can you resend with patch inline?
Luis