Subject: Re: Bug in kernfs_mount()?
To: None <tech-kern@netbsd.org>
From: Christos Zoulas <christos@zoulas.com>
List: tech-kern
Date: 05/26/2004 17:35:11
In article <c92c1j$mmj$1@colwyn.zhadum.de>,
Matthias Scheler <tron@zhadum.de> wrote:
>	Hello,
>
>kernfs_mount() looks like this:
>
>int
>kernfs_mount(mp, path, data, ndp, p)
>	struct mount *mp;
>	const char *path;
>	void *data;
>	struct nameidata *ndp;
>	struct proc *p;
>{
>	int error = 0;
>	struct kernfs_mount *fmp;
>
>[...]
>	MALLOC(fmp, struct kernfs_mount *, sizeof(struct kernfs_mount),
>	    M_KERNFSMNT, M_WAITOK);
>[...]
>	mp->mnt_data = fmp;
>	mp->mnt_flag |= MNT_LOCAL;
>	vfs_getnewfsid(mp);
>
>	error = set_statvfs_info(path, UIO_USERSPACE, "kernfs", UIO_SYSSPACE,
>	    mp, p);
>
>	kernfs_get_rrootdev();
>	return error;
>}
>
>If set_statvfs_info() returns an error the call to VFS_MOUNT() will fail
>and "fmp" will be leaked. Is that correct or will VFS_UNMOUNT() called
>even if a mount attempt fails?

Yes this is a leak; on some filesystems like the above, it can be easily
fixed by free-ing the memory. On others it is more complicated. The
choice is to ignore the error and return 0 having wrong info, or leak.
In this case the error is generated by copying in the path, which should
not happen. Send-pr it.

christos