On Sat, 10 Jun 2000, Alexander Viro wrote:
> > - although not documented, you need to do kern_mount() before trying
>       Yup.
> >   normal mounts of a FS_SINGLE; perhaps kern_mount()/kern_umount()
> >   should be called automatically in
> >   register_filesystem()/unregister_filesystem()?
> 
> I don't think so. They are different operations and I'm not too happy
> about mixing them together. Matter of taste, but...

In get_sb_single() you wrote:

        sb = fs_type->kern_mnt->mnt_sb;
        if (!sb)
                BUG();

and it is kern_mount() that initialises type->kern_mnt. So, if one forgot
to kern_mount a FS_SINGLE filesystem prior to letting userspace try to
mount(2) it, then it is not the BUG() that we hit but an oops of this
kind:

Code;  c013c6b1 <get_sb_single+59/98>   <=====
   0:   8b 58 1c                  mov    0x1c(%eax),%ebx   <=====

(0x1c being offset of mnt_sb in vfsmount)

i.e. maybe we should really have in get_sb_single():

if (!fs_type->kern_mnt || !(sb = fs_type->kern_mnt->mnt_sb))
    BUG();

I.e. if one forgot to kern_mount then fs_type->kern_mnt will be probably
left at NULL so one is more likely to follow a NULL pointer via ->kern_mnt
rather that follow somewhere valid and then find NULL via ->mnt_sb?

Richard, how is it that you actually hit the BUG() above?

Regards,
Tigran


Reply via email to