diff options
Diffstat (limited to 'freed-ora/current/f14/befs-Validate-length-of-long-symbolic-links.patch')
-rw-r--r-- | freed-ora/current/f14/befs-Validate-length-of-long-symbolic-links.patch | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/freed-ora/current/f14/befs-Validate-length-of-long-symbolic-links.patch b/freed-ora/current/f14/befs-Validate-length-of-long-symbolic-links.patch new file mode 100644 index 000000000..f53dfbfad --- /dev/null +++ b/freed-ora/current/f14/befs-Validate-length-of-long-symbolic-links.patch @@ -0,0 +1,50 @@ +From 338d0f0a6fbc82407864606f5b64b75aeb3c70f2 Mon Sep 17 00:00:00 2001 +From: Timo Warns <Warns@pre-sense.de> +Date: Wed, 17 Aug 2011 17:59:56 +0200 +Subject: [PATCH] befs: Validate length of long symbolic links. + +Signed-off-by: Timo Warns <warns@pre-sense.de> +Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> +--- + fs/befs/linuxvfs.c | 23 ++++++++++++++--------- + 1 files changed, 14 insertions(+), 9 deletions(-) + +diff --git a/fs/befs/linuxvfs.c b/fs/befs/linuxvfs.c +index 54b8c28..720d885 100644 +--- a/fs/befs/linuxvfs.c ++++ b/fs/befs/linuxvfs.c +@@ -474,17 +474,22 @@ befs_follow_link(struct dentry *dentry, struct nameidata *nd) + befs_data_stream *data = &befs_ino->i_data.ds; + befs_off_t len = data->size; + +- befs_debug(sb, "Follow long symlink"); +- +- link = kmalloc(len, GFP_NOFS); +- if (!link) { +- link = ERR_PTR(-ENOMEM); +- } else if (befs_read_lsymlink(sb, data, link, len) != len) { +- kfree(link); +- befs_error(sb, "Failed to read entire long symlink"); ++ if (len == 0) { ++ befs_error(sb, "Long symlink with illegal length"); + link = ERR_PTR(-EIO); + } else { +- link[len - 1] = '\0'; ++ befs_debug(sb, "Follow long symlink"); ++ ++ link = kmalloc(len, GFP_NOFS); ++ if (!link) { ++ link = ERR_PTR(-ENOMEM); ++ } else if (befs_read_lsymlink(sb, data, link, len) != len) { ++ kfree(link); ++ befs_error(sb, "Failed to read entire long symlink"); ++ link = ERR_PTR(-EIO); ++ } else { ++ link[len - 1] = '\0'; ++ } + } + } else { + link = befs_ino->i_data.symlink; +-- +1.7.6 + |