lkml.org 
[lkml]   [2011]   [Aug]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[03/35] befs: Validate length of long symbolic links.
    3.0-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Timo Warns <Warns@pre-sense.de>

    commit 338d0f0a6fbc82407864606f5b64b75aeb3c70f2 upstream.

    Signed-off-by: Timo Warns <warns@pre-sense.de>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    fs/befs/linuxvfs.c | 23 ++++++++++++++---------
    1 file changed, 14 insertions(+), 9 deletions(-)

    --- a/fs/befs/linuxvfs.c
    +++ b/fs/befs/linuxvfs.c
    @@ -474,17 +474,22 @@ befs_follow_link(struct dentry *dentry,
    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;



    \
     
     \ /
      Last update: 2011-08-27 17:05    [W:4.238 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site