From 1cab83e7fb55e5fdba15e26d25970a2089d7a702 Mon Sep 17 00:00:00 2001 From: yangsheng Date: Fri, 31 Oct 2008 07:54:40 +0000 Subject: [PATCH] Branch b1_8_gate b=17379 i=Brian(LLNL), johann Set recursive symlink depth to 5 when kernel has 4K stack. --- lustre/llite/symlink.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lustre/llite/symlink.c b/lustre/llite/symlink.c index 99005b0..8841385 100644 --- a/lustre/llite/symlink.c +++ b/lustre/llite/symlink.c @@ -167,10 +167,22 @@ static LL_FOLLOW_LINK_RETURN_TYPE ll_follow_link(struct dentry *dentry, struct n #endif CDEBUG(D_VFSTRACE, "VFS Op\n"); +#if THREAD_SIZE < 8192 + /* + * We set the limits recursive symlink to 5 + * instead of default 8 when kernel has 4k stack + * to prevent stack overflow. + */ + if (current->link_count >= 5) { + rc = -ELOOP; + GOTO(out_release, rc); + } +#endif down(&lli->lli_size_sem); rc = ll_readlink_internal(inode, &request, &symname); up(&lli->lli_size_sem); if (rc) { +out_release: path_release(nd); /* Kernel assumes that ->follow_link() releases nameidata on error */ GOTO(out, rc); -- 1.8.3.1