From f31725ca3f1dee17ad1261152f52897773a3cb5a Mon Sep 17 00:00:00 2001 From: Duane Griffin Date: Thu, 8 Jan 2009 22:43:48 +0000 Subject: [PATCH] --- yaml --- r: 135925 b: refs/heads/master c: 9e6766cc8c125cf406960a5bfdf1455473f4835c h: refs/heads/master i: 135923: 485513ddba15739a0447c5f20d8e1dcfc714822e v: v3 --- [refs] | 2 +- trunk/fs/ufs/super.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index ba4f8840b88a..ff4f1ac665e4 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c8fe8f30c7fe6ce6fc44a1db7d5bfa5144cd9211 +refs/heads/master: 9e6766cc8c125cf406960a5bfdf1455473f4835c diff --git a/trunk/fs/ufs/super.c b/trunk/fs/ufs/super.c index 261a1c2f22dd..e1c1fc5ee239 100644 --- a/trunk/fs/ufs/super.c +++ b/trunk/fs/ufs/super.c @@ -636,6 +636,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent) unsigned block_size, super_block_size; unsigned flags; unsigned super_block_offset; + unsigned maxsymlen; int ret = -EINVAL; uspi = NULL; @@ -1069,6 +1070,16 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent) uspi->s_maxsymlinklen = fs32_to_cpu(sb, usb3->fs_un2.fs_44.fs_maxsymlinklen); + if (uspi->fs_magic == UFS2_MAGIC) + maxsymlen = 2 * 4 * (UFS_NDADDR + UFS_NINDIR); + else + maxsymlen = 4 * (UFS_NDADDR + UFS_NINDIR); + if (uspi->s_maxsymlinklen > maxsymlen) { + ufs_warning(sb, __func__, "ufs_read_super: excessive maximum " + "fast symlink size (%u)\n", uspi->s_maxsymlinklen); + uspi->s_maxsymlinklen = maxsymlen; + } + inode = ufs_iget(sb, UFS_ROOTINO); if (IS_ERR(inode)) { ret = PTR_ERR(inode);