From: Trond Myklebust The following patch (backported from the NFSv4 code) should do the right thing. --- 25-akpm/fs/nfs/nfs3xdr.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diff -puN fs/nfs/nfs3xdr.c~nfs-long-symlinks-fix fs/nfs/nfs3xdr.c --- 25/fs/nfs/nfs3xdr.c~nfs-long-symlinks-fix 2004-05-16 00:06:51.286279224 -0700 +++ 25-akpm/fs/nfs/nfs3xdr.c 2004-05-16 00:06:51.290278616 -0700 @@ -742,8 +742,11 @@ nfs3_xdr_readlinkres(struct rpc_rqst *re strlen = (u32*)kmap_atomic(rcvbuf->pages[0], KM_USER0); /* Convert length of symlink */ len = ntohl(*strlen); - if (len > rcvbuf->page_len) - len = rcvbuf->page_len; + if (len > PAGE_CACHE_SIZE - 5) { + printk(KERN_WARNING "nfs: server returned giant symlink!\n"); + kunmap_atomic(strlen, KM_USER0); + return -EIO; + } *strlen = len; /* NULL terminate the string we got */ string = (char *)(strlen + 1); _