lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 09 Mar 2009 21:24:10 +0100
From:	Eric Dumazet <dada1@...mosbay.com>
To:	Ron Yorgason <yorgasor@...il.com>
CC:	netdev@...r.kernel.org
Subject: Re: Kernel Oops in UDP w/ ARM architecture

Ron Yorgason a écrit :
> On Mon, Mar 9, 2009 at 1:21 PM, Eric Dumazet <dada1@...mosbay.com> wrote:
>> Please dont top post on this mailing list
>>
>> Ron Yorgason a écrit :
>>> We're using the fec driver, found in drivers/net/fec.c.  I modified
>>> this driver slightly to get the MAC address from the redboot
>>> configuration stored in flash memory, but it's otherwise untouched.  I
>>> can send my version of the file if that would help.
>>>
>>> --Ron
>>>
>>>
>> Given that ARM seems to be picky about non aligned accesses, you might
>> try this patch. This should force IP header to be aligned.
>>
>> diff -u linux-2.6.19/drivers/net/fec.c.old linux-2.6.19/drivers/net/fec.c
>> --- linux-2.6.19/drivers/net/fec.c.old
>> +++ linux-2.6.19/drivers/net/fec.c
>> @@ -641,13 +641,14 @@
>>         * include that when passing upstream as it messes up
>>         * bridging applications.
>>         */
>> -       skb = dev_alloc_skb(pkt_len-4);
>> +       skb = dev_alloc_skb((pkt_len - 4) + 2);
>>
>>        if (skb == NULL) {
>>                printk("%s: Memory squeeze, dropping packet.\n", dev->name);
>>                fep->stats.rx_dropped++;
>>        } else {
>>                skb->dev = dev;
>> +               skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */
>>                skb_put(skb,pkt_len-4); /* Make room */
>>                eth_copy_and_sum(skb, data, pkt_len-4, 0);
>>                skb->protocol=eth_type_trans(skb,dev);
>>
>>
> 
> Thanks for the patch.  It looks like Freescale modified this section
> of the code in our BSP, so I'm looking at how to best merge things in.
>  Also, since we're allocating an extra 2 bytes in dev_alloc_skb(), do
> we need to account for those bytes in skb_put() and
> eth_copy_and_sum(), or does the skb_reserve() call handle that?

We allocate 2 extra bytes, because skb_reserve() will advance skb->data pointer
by two bytes. Those two bytes plus 14 bytes ethernet header : total 16 bytes,
so that IP header is aligned on 16 byte boundaries.

No other changes are necessary.

Then, maybe this patch is not necessary at all on your platform, since crash happens
a *long* time after boot. It may be a shoot in the dark...


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ