Re: max symlink = 5? ?bug? ?feature deficit?

From: linux
Date: Sun Feb 12 2006 - 10:15:41 EST


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.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/