Re: "modularized" 2.4.34.4 -> ide-core "unresolved symbols"

Willy Tarreau
2007-05-12T11:08:38Z

Hi Zbigniew,

On Thu, May 10, 2007 at 12:05:44AM +0200, Zbigniew Baniewski wrote:
> So, I changed the config (below) and made another compilation - still the
> same:
> ------------------------
> ...ordinary boot messages, ending with "hda:... sectors... w/Cache..."
> hda: attached ide-disk driver
> hda:<1>Unable to handle kernel paging request at virtual address ffffff00
> printing eip:
>
> ...a lot of interesting stuff...
>
> <0>Kernel panic: Attempted to kill the idle task!
> In idle task - not syncing.
> -----------------------
>
> I'm afraid, kernel 2.4.34.4 is just broken.

Well, in fact it's not just that easy.

I've tried your image and could reproduce the same panic here.
However, it is not the same problem at all, because it appears
unrelated to IDE, and it crashes about 1 second after init has
been forked. I noticed this because I had a hard time trying
to get access to a shell, then I finally decided to put sash
on the FS and rebuild it. I booted with init=sash and got the
sash prompt, then the panic one second after it, while no
module could be loaded.

I decoded the panic dump :

VFS: Mounted root (cramfs filesystem) readonly.
Freeing unused kernel memory: 116k freed
Unable to handle kernel paging request at virtual address ffffff00
printing eip:
c0113a80
Oops: 0002
CPU: 0
EIP: 0010:[<c0113a80>] Not tainted
Using defaults from ksymoops -t elf32-i386 -a i386
EFLAGS: 00010286
eax: ffffff00 ebx: 00000001 ecx: ffffffff edx: c0300000
esi: 00049800 edi: c0270800 ebp: 0003e000 esp: c0301fc4
ds: 0018 es: 0018 ss: 0018
Process swapper (pid: 0, stackpage=c0301000)
Stack: c012016c 00000001 00049800 c0270800 c011e2a0 c0108166 c0270f60 00007dfd
00007dfd 00007dfd 00007dfd c0303340 c011e1ba 00000000 00000000
Call Trace: [<c012016c>] [<c011e2a0>] [<c0108166>] [<c011e1ba>]
Code: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

>>EIP; c0113a80 <init_idle+0/94> <=====
Trace; c012016c <cpu_idle+8/54>
Trace; c011e2a0 <rest_init+50/54>
Trace; c0108166 <start_kernel+172/178>
Trace; c011e1ba <L6+0/2>
Code; c0113a80 <init_idle+0/94>
00000000 <_EIP>:

<0>Kernel panic: Attempted to kill the idle task!

It crashes in init_idle(), itself called by cpu_idle(). I retried with
plain 2.4.34, and this one works perfectly.

Then I dowloaded grsec as I've noticed your kernel is called -grsec. I
applied the patch to plain 2.4.34, and kaboom ! The same panic as above.
Unfortunately, grsec does not seem to modify the functions above, so
it's trickier than it looks.

The fact that it is inside an initrd makes it amazingly difficult to
debug. It took me 3 hours this morning to succesfully get a shell
with no modules loaded.

Then I tried to hard-link the IDEDISK module, and it works even with
grsec. So right now, all I can say is :
- 2.4.34 + IDEDISK=y works
- 2.4.34 + IDEDISK=m works
- 2.4.34 + grsec + IDEDISK=y works
- 2.4.34 + grsec + IDEDISK=m breaks

I do not have enough knowledge of the IDE DISK driver nor of grsec to
guess what goes wrong. If other people on the list could enlighten me,
I would appreciate it. In the mean time, I suggest that you avoid
grsec+IDEDISK=m. So maybe using IDEDISK=y would be acceptable, even
if we agree that we're hiding the bug instead of fixing it ?

Regards,
Willy