Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 1 Jan 2011 18:54:04 +0000
From:      Roger Leigh <rleigh@debian.org>
To:        Bruce Evans <brde@optusnet.com.au>
Cc:        freebsd-bugs@freebsd.org, freebsd-gnats-submit@freebsd.org
Subject:   Re: bin/153600: Path length restrictions in mount/umount tools prevent filesystem mount/unmount
Message-ID:  <20110101185404.GH11671@codelibre.net>
In-Reply-To: <20110102050301.B1641@besplex.bde.org>
References:  <201101011746.p01Hk5UQ008490@red.freebsd.org> <20110102050301.B1641@besplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--to+bXLvrczl8f0V1
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Sun, Jan 02, 2011 at 05:13:16AM +1100, Bruce Evans wrote:
> On Sat, 1 Jan 2011, Roger Leigh wrote:
>
>> t@mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  amd64
>>> Description:
>> When mount is asked to mount a filesystem on a node whose absolute path =
is longer than 85 characters in length, the mount fails.  Umount also fails=
 under some circumstances, though the testcase attached below doesn't show =
this.
>> ...
>>> Fix:
>> I suspect that the mount/umount tools are using a fixed-length buffer an=
d/or are truncating the path at some point.
>>
>> The mount(2) manual page documents the max path length at 1023 character=
s, and the maximum length of any single component at 255 characters.  These=
 limits have not been exceeded, unless the documentation is incorrect.
>>
>> The practical upper limit of 80-85 characters demonstrated in this bug r=
eport is very low.  The documented [ENAMETOOLONG] limit in mount(2) is sens=
ible, but does not appear to reflect the practical reality at the present t=
ime.  If the 80-85 character limit could be eliminated to allow this to wor=
k as documented, this would remove a significant limitation in the FreeBSD =
system which is breaking software which requires longer paths to function.
>
> Mount name lengths are in practice limited to (MNAMELEN - 1) =3D 87.  See
> <sys/mount.h>.  This isn't easy to fix, since MNAMELEN is in critical APIs
> (mainly struct statfs).  struct statfs has already been changed once too
> often.  MNAMELEN used to be (80 - 2 * sizeof(long)), which is 80 or 72,
> but was changed to 88.  MNAMELEN is of course mentioned in statfs(2), but
> it isn't mentioned in mount(2) because it doesn't apply to the actual mou=
nt
> operation but only to determining what is mounted using statfs(2).  The
> buffer gets truncated at mount time by mount in the kernel copying the
> file name to the statfs buffer with blind truncation.
>
> In practice, this means that you should never use the feature of mounting
> pathnames with length between MNAMELEN and (PATH_MAX - 1), since it is too
> hard to manage the resulting mountpoints.

I see, thanks.  This does make things somewhat more complex to fix.

As a longer term (rather than immediate) solution, could I suggest
taking a look at the GNU libc/linux versions of the statfs structure in
<bits/statfs.h>?  In this version, the fixed-length fields are entirely
absent, and so the length limitations are a non-issue here.  Of course,
the structures are not compatible, and the missing information would
need to be obtained via other means such as getmntent of /proc/mounts
(for example).  But, the getmntent interface is also equally
unrestricted, so in practice on GNU/Linux this problem does not exist.


Kind regards,
Roger

--=20
  .''`.  Roger Leigh
 : :' :  Debian GNU/Linux             http://people.debian.org/~rleigh/
 `. `'   Printing on GNU/Linux?       http://gutenprint.sourceforge.net/
   `-    GPG Public Key: 0x25BFB848   Please GPG sign your mail.

--to+bXLvrczl8f0V1
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEARECAAYFAk0feEwACgkQVcFcaSW/uEhzKgCfRUHtNiwnSjHt//aTpbXqQNSY
AUEAoM+ODWdhnvMlyk6RMRMAXSKwfpIq
=bMeU
-----END PGP SIGNATURE-----

--to+bXLvrczl8f0V1--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110101185404.GH11671>