| From 418c6cf3eb6e224bc8213c29d9946e8f1ff67d03 Mon Sep 17 00:00:00 2001 |
| From: Joel Becker <joel.becker@oracle.com> |
| Date: Wed, 29 Sep 2010 17:33:05 -0700 |
| Subject: [PATCH] ocfs2: Don't walk off the end of fast symlinks. |
| |
| commit 1fc8a117865b54590acd773a55fbac9221b018f0 upstream. |
| |
| ocfs2 fast symlinks are NUL terminated strings stored inline in the |
| inode data area. However, disk corruption or a local attacker could, in |
| theory, remove that NUL. Because we're using strlen() (my fault, |
| introduced in a731d1 when removing vfs_follow_link()), we could walk off |
| the end of that string. |
| |
| Signed-off-by: Joel Becker <joel.becker@oracle.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| --- |
| fs/ocfs2/symlink.c | 2 +- |
| 1 files changed, 1 insertions(+), 1 deletions(-) |
| |
| diff --git a/fs/ocfs2/symlink.c b/fs/ocfs2/symlink.c |
| index 32499d2..9975457 100644 |
| --- a/fs/ocfs2/symlink.c |
| +++ b/fs/ocfs2/symlink.c |
| @@ -128,7 +128,7 @@ static void *ocfs2_fast_follow_link(struct dentry *dentry, |
| } |
| |
| /* Fast symlinks can't be large */ |
| - len = strlen(target); |
| + len = strnlen(target, ocfs2_fast_symlink_chars(inode->i_sb)); |
| link = kzalloc(len + 1, GFP_NOFS); |
| if (!link) { |
| status = -ENOMEM; |
| -- |
| 1.7.0.4 |
| |