Subject: Re: [PATCH] net: sk == 0xffffffff fix - not for commit

From: Andrzej Pietrasiewicz <[email-masked]>
Date: Thu, 16 Jan 2014 16:21:19 +0100

W dniu 10.12.2013 15:25, Eric Dumazet pisze:
> On Tue, 2013-12-10 at 07:55 +0100, Andrzej Pietrasiewicz wrote:
>> W dniu 09.12.2013 16:31, Eric Dumazet pisze:
>>> On Mon, 2013-12-09 at 12:47 +0100, Andrzej Pietrasiewicz wrote:
>>>> NOT FOR COMMITTING TO MAINLINE.
>>>>
>>>> With g_ether loaded the sk occasionally becomes 0xffffffff.
>>>> It happens usually after transferring few hundreds of kilobytes to few
>>>> tens of megabytes. If sk is 0xffffffff then dereferencing it causes
>>>> kernel panic.
>>>>
>>>> This is a *workaround*. I don't know enough net code to understand the core
>>>> of the problem. However, with this patch applied the problems are gone,
>>>> or at least pushed farther away.
>>>
>>> Is it happening on SMP or UP ?
>>
>> UP build, S5PC110
>
> OK
>
> I believe you need additional debugging to track the exact moment
> 0xffffffff is fed to 'sk'
>
> It looks like a very strange bug, involving a problem in some assembly
> helper, register save/restore, compiler bug or stack corruption or
> something.
>

I started with adding WARN_ON(sk == 0xffffffff); just before return in
__inet_lookup_established(), and the problem was gone. So this looks
very strange, like a toolchain problem.

I used gcc-linaro-arm-linux-gnueabihf-4.8-2013.05.

If I change the toolchain to

gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415

the problem seems to have gone away.

I attach the kernel config I used.

AP