public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* max symlink = 5? ?bug? ?feature deficit?
@ 2006-02-11  3:31 Linda Walsh
  2006-02-12 10:27 ` Jan Engelhardt
  2006-02-12 18:06 ` max symlink = 5? ?bug? ?feature deficit? Al Viro
  0 siblings, 2 replies; 20+ messages in thread
From: Linda Walsh @ 2006-02-11  3:31 UTC (permalink / raw)
  To: Linux-Kernel

The maximum number of followed symlinks seems to be set to 5.

This seems small when compared to other filesystem limits.
Is there some objection to it being raised?  Should it be
something like Glib's '20' or '255'?

It would involve a change in include/namei.h and perhaps
a cleanup of the comment (which states the limit is '8') in
namei.c

There is some confusion with the shell utilities thinking
some links are valid, but other utilities giving an error:

 > readlink -f cpu/args.t
/usr/src/packages/BUILD/perl-5.8.6/t/op/args.t
 > cat cpu/args.t
cat: cpu/args.t: Too many levels of symbolic links
 > namei cpu/args.t
f: cpu/args.t
 d cpu
 l args.t -> ../op/args.t
   d ..
   l op -> ../t/op/
     d ..
     l t -> perldir/t
       l perldir -> perl-5.8.6
         l perl-5.8.6 -> ../build/perl-5.8.6
           d ..
           l build -> BUILD
             d BUILD
           d perl-5.8.6
       d t
     d op
   - args.t


^ permalink raw reply	[flat|nested] 20+ messages in thread
* Re: max symlink = 5? ?bug? ?feature deficit?
@ 2006-02-12 15:16 linux
  0 siblings, 0 replies; 20+ messages in thread
From: linux @ 2006-02-12 15:16 UTC (permalink / raw)
  To: lkml; +Cc: linux-kernel

That limit should be a *recursion* limit only.
Symlinks in the last component of a path are looked up
iteratively (to save kernel stack space), but a symlink in
the middle of a path can't be done tail-recursively.

E.g. in your example

 > namei cpu/args.t
f: cpu/args.t
 d cpu
 l args.t -> ../op/args.t
   d ..
   l op -> ../t/op/
     d ..
     l t -> perldir/t
       l perldir -> perl-5.8.6
         l perl-5.8.6 -> ../build/perl-5.8.6
           d ..
           l build -> BUILD
             d BUILD
           d perl-5.8.6
       d t
     d op
   - args.t

Wow, what a symlink maze.  The args.t -> ../op/args.t
symlink is no problems, but it's the mess of directory links
that the system has to traverse:

cpu/args.t
cpu/../op/args.t		Tail-recursive expansion
cpu/../(../t/op)/args.t
cpu/../(../(perldir/t)/op)/args.t
cpu/../(../((perl-5.8.6)/t)/op)/args.t
cpu/../(../((../build/perl-5.8.6)/t)/op)/args.t
cpu/../(../((../(BUILD)/perl-5.8.6)/t)/op)/args.t

I'm supposing the initial level counts as 1, so 1+5 = 6 and blows the
limit.

There's also an iteration limit, to stop a -> b -> c -> a cycles,
but that's much higher.  The recursion limit is a stack space issue.

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

end of thread, other threads:[~2006-02-13 14:10 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-02-11  3:31 max symlink = 5? ?bug? ?feature deficit? Linda Walsh
2006-02-12 10:27 ` Jan Engelhardt
2006-02-12 20:46   ` [PATCH] Use one constant to control MAX SYMLINKS in a name Linda Walsh
2006-02-12 21:16     ` Al Viro
2006-02-12 18:06 ` max symlink = 5? ?bug? ?feature deficit? Al Viro
2006-02-12 19:19   ` Dave Jones
2006-02-12 19:36   ` Matthew Wilcox
2006-02-12 19:48     ` Al Viro
2006-02-12 21:18   ` Linda Walsh
2006-02-12 21:25     ` Al Viro
2006-02-12 22:54       ` Linda Walsh
2006-02-13  0:08         ` Al Viro
2006-02-13  0:54           ` Linda Walsh
2006-02-13  7:37             ` Willy Tarreau
2006-02-13  7:48               ` Arjan van de Ven
2006-02-13  8:03                 ` Willy Tarreau
2006-02-13  8:11                   ` Al Viro
2006-02-13 14:10                   ` Olivier Galibert
2006-02-13  8:20               ` Helge Hafting
  -- strict thread matches above, loose matches on Subject: below --
2006-02-12 15:16 linux

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