In mount.h, we have a #define MNAMELEN        80

and in struct statfs {} we have:

char    f_mntonname[MNAMELEN];  /* directory on which mounted */

but the kernel does no check to see if the mountpath is longer
than MNAMELEN, it just accepts it ? It's impossible to umount(8)
it, because umount(8) does not like to unmount some device which
does not belong to the mountpoint.

--- vfs_syscalls.c      Sun Nov 26 03:30:05 2000
+++ vfs_syscalls.c.new  Thu Feb 15 18:22:13 2001
@@ -140,6 +140,8 @@
        /*
         * Get vnode to be covered
         */
+       if (strlen(SCARG(uap, path)) > MNAMELEN)
+               return (ENAMETOOLONG);
        NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF, UIO_USERSPACE,
            SCARG(uap, path), p);
        if ((error = namei(&nd)) != 0)

Martin Blapp, [EMAIL PROTECTED]
------------------------------------------------
Improware AG, UNIX solution and service provider
Zurlindenstrasse 29, 4133 Pratteln, Switzerland
Phone: +41 79 370 26 05, Fax: +41 61 826 93 01
------------------------------------------------



To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to