public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] xfs: Fix possible memory corruption in xfs_readlink
@ 2011-10-17  1:26 Carlos Maiolino
  2011-10-16 23:41 ` Dave Chinner
  0 siblings, 1 reply; 4+ messages in thread
From: Carlos Maiolino @ 2011-10-17  1:26 UTC (permalink / raw)
  To: xfs; +Cc: Carlos Maiolino

This patch fix a possible memory corruption when
the link is larger than MAXPATHLEN and XFS_DEBUG
is not enabled. This also uses S_IFLNK to check
link not only in DEBUG mode.

Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com>
---
 fs/xfs/xfs_vnodeops.c |   18 ++++++++++++++++--
 1 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c
index 51fc429..3f4fbd5 100644
--- a/fs/xfs/xfs_vnodeops.c
+++ b/fs/xfs/xfs_vnodeops.c
@@ -123,8 +123,22 @@ xfs_readlink(
 
 	xfs_ilock(ip, XFS_ILOCK_SHARED);
 
-	ASSERT(S_ISLNK(ip->i_d.di_mode));
-	ASSERT(ip->i_d.di_size <= MAXPATHLEN);
+	if (unlikely(!(S_ISLNK(ip->i_d.di_mode))) ||
+	    unlikely(!(ip->i_d.di_size <= MAXPATHLEN ))){
+
+		XFS_CORRUPTION_ERROR("xfs_readlink",
+		XFS_ERRLEVEL_HIGH, mp, ip);
+
+#ifdef DEBUG
+		xfs_emerg(mp, "inode (%lld), link too long or not a link."
+			 (unsigned long long)ip->i_no);
+
+		ASSERT(S_ISLNK(ip->i_d.di_mode));
+		ASSERT(ip->i_d.di_size <= MAXPATHLEN);
+#endif
+
+		return XFS_ERROR(EFSCORRUPTED);
+	}
 
 	pathlen = ip->i_d.di_size;
 	if (!pathlen)
-- 
1.7.6.2

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

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

end of thread, other threads:[~2011-10-17 12:25 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-10-17  1:26 [PATCH] xfs: Fix possible memory corruption in xfs_readlink Carlos Maiolino
2011-10-16 23:41 ` Dave Chinner
2011-10-17 14:52   ` Carlos Maiolino
2011-10-17 12:24     ` Carlos Maiolino

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