瀏覽代碼

ocfs2: Don't walk off the end of fast symlinks.

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>
Cc: stable@kernel.org
Joel Becker 14 年之前
父節點
當前提交
1fc8a11786
共有 1 個文件被更改,包括 1 次插入1 次删除
  1. 1 1
      fs/ocfs2/symlink.c

+ 1 - 1
fs/ocfs2/symlink.c

@@ -128,7 +128,7 @@ static void *ocfs2_fast_follow_link(struct dentry *dentry,
 	}
 	}
 
 
 	/* Fast symlinks can't be large */
 	/* 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);
 	link = kzalloc(len + 1, GFP_NOFS);
 	if (!link) {
 	if (!link) {
 		status = -ENOMEM;
 		status = -ENOMEM;