mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* chicken/egg between pipefs and initramfs/hotplug
@ 2004-10-25 18:30 Thayne Harbaugh
  2004-10-26 23:29 ` Andrew Morton
  0 siblings, 1 reply; 3+ messages in thread
From: Thayne Harbaugh @ 2004-10-25 18:30 UTC (permalink / raw)
  To: klibc; +Cc: linux-kernel, linux-hotplug-devel

I have a hotplug setup in initramfs.  Everytime that modprobe is called
I get a kernel oops: NULL pointer dereference:

Unable to handle kernel NULL pointer dereference<1>Unable to handle kernel NULL pointer dereference at virtual address 00000014
 printing eip:
c015db49
*pde = 00000000
Oops: 0000 [#1]
PREEMPT SMP
Modules linked in:
CPU:    3
EIP:    0060:[<c015db49>]    Not tainted
EFLAGS: 00010296   (2.6.8)
EIP is at get_pipe_inode+0x9/0xb2
eax: 00000000   ebx: f74f4780   ecx: 00000000   edx: 00000000
esi: f7575580   edi: 0805cbdc   ebp: f767a000   esp: f767bf3c
ds: 007b   es: 007b   ss: 0068
Process default.hotplug (pid: 184, threadinfo=f767a000 task=f74d9110)
Stack: f74f4780 f74f4780 c015dc24 f74d9110 c0168225 f7963ef0 c0392e80 f74f4780
       ffffffe9 f74f4080 f767bfac 00000ff8 c014ff5f f7963cb0 00000001 00000ff8
       f767bfac c0162d17 00000000 f74f4080 fffffff7 bfffdeec f767bfb0 0805cbdc
Call Trace:
 [<c015dc24>] do_pipe+0x32/0x20e
 [<c0168225>] dput+0x9e/0x2b0
 [<c014ff5f>] vfs_read+0x94/0x103
 [<c0162d17>] do_fcntl+0x18c/0x21f
 [<c010a8ad>] sys_pipe+0x11/0x49
 [<c0103f2f>] syscall_call+0x7/0xb
Code: 8b 40 14 89 04 24 e8 4e d5 00 00 85 c0 89 c3 0f 84 8d 00 00


It appears that linux/init/main.c:init() has a chicken/egg problem.
Apparently modprobe and other programs need a pipe and pipefs isn't
mounted until later on in do_basic_setup()/do_initcalls().  That means
that linux/fs/pipe.c:static struct vfsmount *pipe_mnt;  isn't
initialized and blows up when it's derefernced in
linux/fs/pipe.c:get_pipe_inode().

Has this been discussed before?  Is there something that userspace can
wait on until pipefs is mounted or more of the kernel is initialized?  I
did some searching and I just can't turn up a previous discussion about
this - my apologies if it's already been covered.

-- 
Thayne Harbaugh
Linux Networx


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: chicken/egg between pipefs and initramfs/hotplug
  2004-10-25 18:30 chicken/egg between pipefs and initramfs/hotplug Thayne Harbaugh
@ 2004-10-26 23:29 ` Andrew Morton
  2004-10-28 14:23   ` Thayne Harbaugh
  0 siblings, 1 reply; 3+ messages in thread
From: Andrew Morton @ 2004-10-26 23:29 UTC (permalink / raw)
  To: tharbaugh; +Cc: klibc, linux-kernel, linux-hotplug-devel

Thayne Harbaugh <tharbaugh@lnxi.com> wrote:
>
> It appears that linux/init/main.c:init() has a chicken/egg problem.
> Apparently modprobe and other programs need a pipe and pipefs isn't
> mounted until later on in do_basic_setup()/do_initcalls().  That means
> that linux/fs/pipe.c:static struct vfsmount *pipe_mnt;  isn't
> initialized and blows up when it's derefernced in
> linux/fs/pipe.c:get_pipe_inode().

That's a bit sad.  Does this fix it?

--- 25/fs/pipe.c~a	Tue Oct 26 16:28:44 2004
+++ 25-akpm/fs/pipe.c	Tue Oct 26 16:28:52 2004
@@ -718,5 +718,5 @@ static void __exit exit_pipe_fs(void)
 	mntput(pipe_mnt);
 }
 
-module_init(init_pipe_fs)
+fs_initcall(init_pipe_fs)
 module_exit(exit_pipe_fs)
_


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: chicken/egg between pipefs and initramfs/hotplug
  2004-10-26 23:29 ` Andrew Morton
@ 2004-10-28 14:23   ` Thayne Harbaugh
  0 siblings, 0 replies; 3+ messages in thread
From: Thayne Harbaugh @ 2004-10-28 14:23 UTC (permalink / raw)
  To: Andrew Morton; +Cc: klibc, linux-kernel, linux-hotplug-devel

[-- Attachment #1: Type: text/plain, Size: 1233 bytes --]

Sorry to take so long to reply.

On Tue, 2004-10-26 at 16:29 -0700, Andrew Morton wrote:
> Thayne Harbaugh <tharbaugh@lnxi.com> wrote:
> >
> > It appears that linux/init/main.c:init() has a chicken/egg problem.
> > Apparently modprobe and other programs need a pipe and pipefs isn't
> > mounted until later on in do_basic_setup()/do_initcalls().  That means
> > that linux/fs/pipe.c:static struct vfsmount *pipe_mnt;  isn't
> > initialized and blows up when it's derefernced in
> > linux/fs/pipe.c:get_pipe_inode().
> 
> That's a bit sad.  Does this fix it?
> 
> --- 25/fs/pipe.c~a	Tue Oct 26 16:28:44 2004
> +++ 25-akpm/fs/pipe.c	Tue Oct 26 16:28:52 2004
> @@ -718,5 +718,5 @@ static void __exit exit_pipe_fs(void)
>  	mntput(pipe_mnt);
>  }
>  
> -module_init(init_pipe_fs)
> +fs_initcall(init_pipe_fs)
>  module_exit(exit_pipe_fs)
> _

Works great, other than the omitted ';' for the fs_initcall():

--- fs/pipe.c.orig      2004-10-28 08:59:47.383192448 -0600
+++ fs/pipe.c   2004-10-28 08:57:07.746460920 -0600
@@ -718,5 +718,5 @@
        mntput(pipe_mnt);
 }

-module_init(init_pipe_fs)
+fs_initcall(init_pipe_fs);
 module_exit(exit_pipe_fs)

Thanks.

-- 
Thayne Harbaugh
Linux Networx

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2004-10-28 14:48 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-10-25 18:30 chicken/egg between pipefs and initramfs/hotplug Thayne Harbaugh
2004-10-26 23:29 ` Andrew Morton
2004-10-28 14:23   ` Thayne Harbaugh

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®